kubernetes集群搭建(1.26版本)

集群搭建

  • 1.初始化安装k8s集群的实验
    • 1.1修改主机名称
    • 1.2关闭防火墙
    • 1.3关闭SELINUX
    • 1.4配置主机hosts文件,相互之间通过主机名访问
    • 1.5配置主机之间无密码登录
    • 1.6关闭交换分区swap,提升性能
    • 1.7修改机器内核参数
    • 1.9配置阿里云的repo源
    • 1.10配置安装k8s组件需要的阿里云repo源
    • 1.11配置时间同步
    • 1.12安装基础软件包
  • 2.安装containerd服务
    • 2.1安装containerd
  • 3.安装k8s需要的软件包
  • 4.kubeadm初始化k8s网络集群
    • 4.1基于kubeadm.yaml初始化k8s集群
  • 5.添加第一次工作节点
  • 6.安装kubernetes网络组件-calico
    • 6.1calico网络插件配置文件说明
  • 7.测试在k8s创建pod是否可以正常访问网络
  • 8.ctr和crictl的区别
  • 9.扩容k8s集群,添加第二个工作节点
  • 10.扩容k8s集群,添加第二个管理节点

环境准备

角色IP
主节点:master1192.168.40.180
主节点:master2192.168.40.183
工作节点:node1192.168.40.181
工作节点:node2192.168.40.182

master2和node2用做k8s集群的扩容

安装需要
链接:https://pan.baidu.com/s/17eFlM6kJN2rdeSvhTTVRFw
提取码:nx09
–来自百度网盘超级会员V3的分享

1.初始化安装k8s集群的实验

1.1修改主机名称

master1

# 修改主机名称
hostnamectl set-hostname master1 && bash

node1

hostnamectl set-hostname node1 && bash

1.2关闭防火墙

master1

# 关闭防火墙
[root@master1 ~]# systemctl stop firewalld && systemctl disable firewalld

node1

[root@node1 ~]# systemctl stop firewalld && systemctl disable firewalld

1.3关闭SELINUX

master1

#修改配置文件
[root@master1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/co
# 重启机器生效
[root@master1 ~]# reboot

node1

[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/co

[root@node1 ~]# reboot

1.4配置主机hosts文件,相互之间通过主机名访问

修改每台机器的/etc/hosts文件,文件最后增加如下内容:
master1:

vim /etc/hosts

192.168.40.180 master1
192.168.40.181 node1

node1:

vim /etc/hosts

192.168.40.180 master1
192.168.40.181 node1

1.5配置主机之间无密码登录

master1

# 创建密钥
[root@master1 ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:jCUEBllzJUq672lZGR5ck5BTy9C59vXsKAaG3JgbLUM root@master1
The key's randomart image is:
+---[RSA 2048]----+
|  .+*.**oo       |
|  .+ =o+*.       |
|  . ...o+o       |
|   .  E=o   .    |
|  .  +.@S. . o   |
|   .  % = .   o  |
|    .o * .   o   |
|   .o..   o . .  |
|   .o    . .     |
+----[SHA256]-----+
# 传输到noded1节点
[root@master1 ~]# ssh-copy-id node1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'node1 (192.168.40.181)' can't be established.
ECDSA key fingerprint is SHA256:M6KzBDyB8kkCkrVm3GtFytNb44nD/1WR9DT18yHEWZ4.
ECDSA key fingerprint is MD5:13:76:bd:4c:17:2d:f0:e4:43:ee:4e:1a:37:6a:49:a2.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node1's password:    # 输入node1的密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'node1'"
and check to make sure that only the key(s) you wanted were added.

1.6关闭交换分区swap,提升性能

问题1:为什么要关闭swap交换分区?
Swap是交换分区,如果机器内存不够,会使用swap分区,但是swap分区的性能较低,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s的时候可以指定--ignore-preflight-errors=Swap来解决。
master1

# 临时关闭swap分区
[root@master1 ~]# swapoff -a
# 永久关闭swap分区,fstab文件给swap这行开头加一下注释

node1

[root@noded1 ~]# vim /etc/fstab
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

1.7修改机器内核参数

问题1:sysctl是做什么的?
在运行时配置内核参数
-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

问题2:为什么要执行modprobe br_netfilter?
修改/etc/sysctl.d/k8s.conf文件,增加如下三行参数:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

sysctl -p /etc/sysctl.d/k8s.conf出现报错:

sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory

解决方法:
modprobe br_netfilter

问题3:为什么开启net.bridge.bridge-nf-call-iptables内核参数?
在centos下安装docker,执行docker info出现如下警告:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

解决办法:
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

问题4:为什么要开启net.ipv4.ip_forward = 1参数?
kubeadm初始化k8s如果报错:
在这里插入图片描述

就表示没有开启ip_forward,需要开启。

net.ipv4.ip_forward是数据包转发:
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
要让Linux系统具有路由转发功能,需要配置一个Linux的内核参数net.ipv4.ip_forward。这个参数指定了Linux系统当前对路由转发功能的支持情况;其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。
master1:

[root@master1 ~]# modprobe br_netfilter
[root@master1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 net.ipv4.ip_forward = 1
 EOF
[root@master1 ~]# sysctl -p /etc/sysctl.d/k8s.conf

node1:

[root@node1 ~]# modprobe br_netfilter
[root@node1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 net.ipv4.ip_forward = 1
 EOF
[root@node1 ~]# sysctl -p /etc/sysctl.d/k8s.conf

1.9配置阿里云的repo源

配置国内安装docker和containerd的阿里云的repo源
master1

# 安装工具
[root@master1 ~]# yum install yum-utils -y
[root@master1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

node1

[root@node1 ~]#yum install yum-utils -y
[root@node1 ~]#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.10配置安装k8s组件需要的阿里云repo源

master1

[root@master1 ~]#cat >  /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

node1

[root@node1 ~]#cat >  /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

1.11配置时间同步

master1

# 安装ntpdate命令
[root@master1 ~]# yum -y install ntpdate
# 跟网络时间做同步
[root@master1 ~]# ntpdate cn.pool.ntp.org
# 把时间同步做成计划任务
[root@master1 ~]# crontab -e
* *  * * * /usr/sbin/ntpdate   cn.pool.ntp.org
# 重启crond服务
[root@master1 ~]# service crond restart

node1

[root@node1 ~]# yum -y install ntpdate
[root@node1 ~]# ntpdate cn.pool.ntp.org
[root@node1 ~]# crontab -e
* *  * * * /usr/sbin/ntpdate   cn.pool.ntp.org
[root@node1 ~]# service crond restart

1.12安装基础软件包

master1:

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

node1

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

2.安装containerd服务

2.1安装containerd

master1

# 安装containerd
[root@master1 ~]# yum -y install  containerd.io-1.6.6
# 接下来生成 containerd 的配置文件
[root@master1 ~]#mkdir -p /etc/containerd
[root@master1 ~]#containerd config default > /etc/containerd/config.toml
# 修改配置文件
打开/etc/containerd/config.toml
把SystemdCgroup = false修改成SystemdCgroup = true
把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
# 配置 containerd 开机启动,并启动 containerd
[root@master1 ~]#systemctl enable containerd  --now
# 修改/etc/crictl.yaml文件,配置容器运行时
[root@master1 ~]#cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
# 重启containerd服务
[root@xianchaomaster1 ~]#systemctl restart  containerd

# 配置containerd镜像加速
配置containerd镜像加速器,k8s所有节点均按照以下配置:
编辑vim /etc/containerd/config.toml文件
找到config_path = "",修改成如下目录:
config_path = "/etc/containerd/certs.d"
保存退出

# 创建并配置存放镜像加速器的目录
mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml
#写入如下内容:
[host."https://ag38j4ig.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
  capabilities = ["pull"]
#重启containerd服务
重启containerd:
systemctl restart containerd
# docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像
[root@master1 ~]# yum -y install  docker-ce 
[root@master1 ~]# systemctl enable docker --now
#配置docker的镜像加速器
[root@master1 ~]# cat >> /etc/docker/daemon.json <<EOF
{
"registry-mirrors":["https://ag38j4ig.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"],
"exec-opts":["native.cgroupdriver=systemd"]
}
EOF
# 重启docker服务
[root@master1 ~]# systemctl  restart docker

node1

[root@node1 ~]# yum -y install  containerd.io-1.6.6
[root@node1 ~]#mkdir -p /etc/containerd
[root@node1 ~]#containerd config default > /etc/containerd/config.toml
打开/etc/containerd/config.toml
把SystemdCgroup = false修改成SystemdCgroup = true
把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
[root@node1 ~]#systemctl enable containerd  --now

[root@node1 ~]#cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
# 重启containerd服务
[root@node1 ~]#systemctl restart  containerd

# 配置containerd镜像加速
配置containerd镜像加速器,k8s所有节点均按照以下配置:
编辑vim /etc/containerd/config.toml文件
找到config_path = "",修改成如下目录:
config_path = "/etc/containerd/certs.d"
保存退出

# 创建并配置存放镜像加速器的目录
mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml
#写入如下内容:
[host."https://ag38j4ig.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
  capabilities = ["pull"]
#重启containerd服务
重启containerd:
systemctl restart containerd

[root@node1 ~]# yum -y install  docker-ce 
[root@node1 ~]# systemctl enable docker --now

[root@node1 ~]# cat >> /etc/docker/daemon.json <<EOF
{
"registry-mirrors":["https://ag38j4ig.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"],
"exec-opts":["native.cgroupdriver=systemd"]
}
EOF
[root@node1 ~]# systemctl  restart docker

3.安装k8s需要的软件包

kubeadm: kubeadm是一个工具,用来初始化k8s集群
kubelet: 安装在集群所有节点上,用于启动Pod的,kubeadm安装k8s,k8s控制节点和工作节点的组件,都是基于pod运行的,只要pod启动,就需要kubelet
kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

master1

[root@master1 ~]# yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0
[root@master1 ~]# systemctl enable kubelet

node1

[root@node1 ~]# yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0
[root@node1 ~]# systemctl enable kubelet

4.kubeadm初始化k8s网络集群

master1

# 设置容器运行时
 [root@master1~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock

node1

# 设置容器运行时
 [root@node1~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock

只在master1节点运行

# 初始化k8s集群
[root@master1 ~]# kubeadm config print init-defaults > kubeadm.yaml

根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,需要注意的是由于我们使用的containerd作为运行时,所以在初始化节点的时候需要指定cgroupDriver为systemd

kubeadm.yaml配置文件如下:

apiVersion: kubeadm.k8s.io/v1beta3
。。。
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.40.180 #控制节点的ip
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock  #指定containerd容器运行时
  imagePullPolicy: IfNotPresent
  name: master1 #控制节点主机名
  taints: null
---
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
# 指定阿里云镜像仓库地址
kind: ClusterConfiguration
kubernetesVersion: 1.26.0 #k8s版本
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个
  serviceSubnet: 10.96.0.0/12 #指定Service网段
scheduler: {}
#在文件最后,插入以下内容,(复制时,要带着---):
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

特别提醒:–image-repository registry.aliyuncs.com/google_containers为保证拉取镜像不到国外站点拉取,手动指定仓库地址为registry.aliyuncs.com/google_containers。kubeadm默认从k8s.gcr.io拉取镜像。 我们本地有导入到的离线镜像,所以会优先使用本地的镜像。

mode: ipvs 表示kube-proxy代理模式是ipvs,如果不指定ipvs,会默认使用iptables,但是iptables效率低,所以我们生产环境建议开启ipvs,阿里云和华为云托管的K8s,也提供ipvs模式

4.1基于kubeadm.yaml初始化k8s集群

将提前下载好的镜像上传到master1和node1上
备注:k8s_1.26.0.tar.gz这个文件如何来的?
这个文件把安装k8s需要的镜像都集成好了,这个是我第一次安装1.26.0这个版本,获取到对应的镜像,通过ctr images export 这个命令把镜像输出到k8s_1.26.0.tar.gz文件,如果大家安装其他版本,那就不需要实现解压镜像,可以默认从网络拉取镜像即可。
ctr是containerd自带的工具,有命名空间的概念,若是k8s相关的镜像,都默认在k8s.io这个命名空间,所以导入镜像时需要指定命令空间为k8s.io
#使用ctr命令指定命名空间导入镜像

[root@master1 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz
[root@node1 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz

在master1节点运行

[root@master1 ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

显示如下,说明安装成功
在这里插入图片描述

#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
[root@master1 ~]# mkdir -p $HOME/.kube
[root@master1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

[root@master1 ~]# kubectl get nodes
AME      STATUS     ROLES           AGE   VERSION
master1   NotReady   control-plane   13m   v1.26.0

5.添加第一次工作节点

在master1上查看加入节点的命令:
[root@master1 ~]# kubeadm token create --print-join-command

显示如下:                                                                    
kubeadm join 192.168.40.180:6443 --token atdvq3.vtad9galyly4x5pv --discovery-token-ca-cert-hash sha256:dfebbd9a9373dfeb5d7a28835d839646a0a10381086f084de5693e938609b2cf 

把node1加入k8s集群:
[root@node1~]# kubeadm join 192.168.40.180:6443 --token atdvq3.vtad9galyly4x5pv --discovery-token-ca-cert-hash sha256:dfebbd9a9373dfeb5d7a28835d839646a0a10381086f084de5693e938609b2cf  --ignore-preflight-errors=SystemVerification

看到下面说明node1节点已经加入到集群了,充当工作节点
在这里插入图片描述
在master1节点上看集群的情况
在这里插入图片描述

6.安装kubernetes网络组件-calico

把安装calico需要的镜像calico.tar.gz传到master1和node1节点,手动解压:

[root@master1 ~]# ctr -n=k8s.io images import calico.tar.gz
[root@node1 ~]# ctr -n=k8s.io images import calico.tar.gz

上传calico.yaml到master1上,使用yaml文件安装calico 网络插件 。

[root@master1 ~]# kubectl apply -f  calico.yaml

注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml 。

看到如下status都是ready,表明网络安装正常
在这里插入图片描述

6.1calico网络插件配置文件说明

1、Daemonset配置
……
containers:
# Runs calico-node container on each Kubernetes node. This
# container programs network policy and routes on each
# host.
- name: calico-node
image: docker.io/calico/node:v3.18.0
……
env:
# Use Kubernetes API as the backing datastore.
- name: DATASTORE_TYPE
value: “kubernetes”
# Cluster type to identify the deployment type
- name: CLUSTER_TYPE
value: “k8s,bgp”
# Auto-detect the BGP IP address.
- name: IP
value: “autodetect”
#pod网段
- name: CALICO_IPV4POOL_CIDR
value: “10.244.0.0/16”
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
value: “Always”

IP_AUTODETECTION_METHOD:获取Node IP地址的方式,默认使用第1个网络接口的IP地址,对于安装了多块网卡的Node,可以使用正则表达式选择正确的网卡,例如"interface=eth.*"表示选择名称以eth开头的网卡的IP地址。

  • name: IP_AUTODETECTION_METHOD
    value: “interface=ens33”

7.测试在k8s创建pod是否可以正常访问网络

[root@master1 ~]# kubectl run busybox --image docker.io/library/busybox:1.28  --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh


/ # ping www.baidu.com
PING www.baidu.com (39.156.66.18): 56 data bytes
64 bytes from 39.156.66.18: seq=0 ttl=127 time=39.3 ms
#通过上面可以看到能访问网络,说明calico网络插件已经被正常安装了

/ # nslookup kubernetes.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

/ # exit #退出pod

10.96.0.10 就是我们coreDNS的clusterIP,说明coreDNS配置好了。
解析内部Service的名称,是通过coreDNS去解析的。

8.ctr和crictl的区别

ctr和crictl区别

背景:在部署k8s的过程中,经常要对镜像进行操作(拉取、删除、查看等)

问题:使用过程中会发现ctr和crictl有很多相同功能,也有些不同,那区别到底在哪里?

说明:

  1. ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互;

  2. ctr和crictl命令具体区别如下,也可以–help查看。crictl缺少对具体镜像的管理能力,可能是k8s层面镜像管理可以由用户自行控制,能配置pod里面容器的统一镜像仓库,镜像的管理可以有habor等插件进行处理。
    在这里插入图片描述

9.扩容k8s集群,添加第二个工作节点

添加node2节点
参照node1节点进行操作

10.扩容k8s集群,添加第二个管理节点

参照上述1,2,3操作
将master2加入到k8s集群

# 把master1节点的证书拷贝到master2上
# 在master2创建证书存放目录:
[root@master2 ~]# cd /root && mkdir -p /etc/kubernetes/pki/etcd &&mkdir -p ~/.kube/
[root@master1 ~]# scp /etc/kubernetes/pki/ca.crt  master2:/etc/kubernetes/pki/
ca.crt                                                                                   100% 1099   869.2KB/s   00:00    
[root@master1 ~]# scp /etc/kubernetes/pki/ca.key  master2:/etc/kubernetes/pki/
ca.key                                                                                   100% 1679     1.5MB/s   00:00    
[root@master1 ~]# scp /etc/kubernetes/pki/sa.key  master2:/etc/kubernetes/pki/
sa.key                                                                                   100% 1679     1.6MB/s   00:00    
[root@master1 ~]# scp /etc/kubernetes/pki/sa.pub  master2:/etc/kubernetes/pki/
sa.pub                                                                                   100%  451   435.4KB/s   00:00    
[root@master1 ~]# scp /etc/kubernetes/pki/front-proxy-ca.crt  master2:/etc/kubernetes/pki/
front-proxy-ca.crt                                                                       100% 1115   790.8KB/s   00:00    
[root@master1 ~]# scp /etc/kubernetes/pki/front-proxy-ca.key  master2:/etc/kubernetes/pki/
front-proxy-ca.key                                                                       100% 1675     1.5MB/s   00:00    
[root@master1 ~]# scp /etc/kubernetes/pki/etcd/ca.crt  master2:/etc/kubernetes/pki/etcd
ca.crt                                                                                   100% 1086     1.2MB/s   00:00    
[root@master1 ~]# scp /etc/kubernetes/pki/etcd/ca.key  master2:/etc/kubernetes/pki/etcd
ca.key                                                                                   100% 1679     1.2MB/s   00:00    
[root@master1 ~]# 
把安装calico需要的镜像calico.tar.gz传到master2,手动解压:
[root@master2 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz
[root@master2 ~]# ctr -n=k8s.io images import calico.tar.gz
检查 kubeadm-config ConfigMap 是否正确配置了 controlPlaneEndpoint。可以使用 kubectl 命令获取 kubeadm-config ConfigMap 的信息:
[root@master1 ~]# kubectl -n kube-system edit cm kubeadm-config -o yaml

# apiVersion下面添加如下字段:
controlPlaneEndpoint: "192.168.40.180:6443"

# 重启kubelet:
[root@master1 ~]# systemctl restart kubelet
# 在master1上查看加入节点的命令:
[root@xianchaomaster1 ~]# kubeadm token create --print-join-command
显示如下:
 kubeadm join 192.168.40.180:6443 --token 6fitex.qdr7fkyloe7mukrj --discovery-token-ca-cert-hash sha256:dfebbd9a9373dfeb5d7a28835d839646a0a10381086f084de5693e938609b2cf
# 加入k8s集群
[root@master2 ~]# kubeadm join 192.168.40.180:6443 --token 6fitex.qdr7fkyloe7mukrj --discovery-token-ca-cert-hash sha256:dfebbd9a9373dfeb5d7a28835d839646a0a10381086f084de5693e938609b2cf   --control-plane --ignore-preflight-errors=SystemVerification
[root@master2 ~]#         mkdir -p $HOME/.kube
[root@master2 ~]#         sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master2 ~]#         sudo chown $(id -u):$(id -g) $HOME/.kube/config

在master2上查看集群情况

[root@master2 ~]# kubectl get  nodes
NAME      STATUS   ROLES           AGE    VERSION
master1   Ready    control-plane   129m   v1.26.0
master2   Ready    control-plane   7m     v1.26.0
node1     Ready    <none>          114m   v1.26.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/409512.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣● 343. 整数拆分 ● 96.不同的二叉搜索树

● 343. 整数拆分 想不到&#xff0c;要勇于看题解。 关键在于理解递推公式。 1、DP数组及其下标的含义&#xff1a;dp[i]是分解i这个数得到的最大的乘积。 2、DP数组如何初始化&#xff1a;dp[0]和dp[1]都没意义&#xff0c;所以直接不赋值&#xff0c;初始化dp[2]1即可。…

让程序员设计B端界面,好比武大郎招聘:向我看齐。不忍直视!

hello&#xff0c;我是大美B端工场&#xff0c;B端系统的要求越来越高了&#xff0c;很多公司还让程序员负责页面&#xff0c;页面搞的没法看&#xff0c;也怪不得程序员。程序员来搞页面&#xff0c;那还不是武大郎招聘——向我看齐&#xff0c;以我的标准为标准吗&#xff1f…

python 基础知识点(蓝桥杯python科目个人复习计划49)

今日复习内容&#xff1a;做复习题 例题1&#xff1a;希尔排序 题目描述&#xff1a; 希尔排序是直接插入排序算法的一种更高效的改进版本&#xff0c;但它是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出的改进方法之一&#xff1a; 1.插入排序在对几乎已经…

预训练-微调范式在人工智能领域的深远影响

预训练-微调范式的出现是人工智能领域的一大里程碑&#xff0c;它深刻改变了深度学习模型的训练方式和应用模式&#xff0c;并对整个行业产生了多方面的深远影响&#xff1a; 数据效率提升&#xff1a; 通过在大规模无标注数据上进行预训练&#xff0c;模型能够学习到丰富的语言…

linux常用的网络命令实战分享

文章目录 ifup/down命令ifconfig命令观察网络接口信息修改接口参数增加虚拟网络接口 route命令查看路由表增加路由表规则删除路由表规则 IP 命令ip linkip addr设定路由 ip route arp 命令 在实际研发运维工作中常常会涉及到网关相关的操作和知识&#xff0c;这里对linux下常用…

(详细使用指南)Linux下交叉编译带ffmpeg的opencv并移植到RK3588等ARM端

一 问题背景 瑞芯微RK3588等嵌入式板作为边缘端设备为算法模型的部署提供了便利&#xff0c;目前很多分类或好检测模型针对边缘端做了优化或量化&#xff0c;使得在边缘端也能达到实时稳定的识别和检测效果。 但嵌入式设备普遍的flash emmc不大&#xff0c;一般在32G左…

【数据结构与算法】(20)高级数据结构与算法设计之 Greedy Algorithm 贪心算法 代码示例与详细讲解

目录 4.2 Greedy Algorithm1) 贪心例子DijkstraPrimKruskal 2) 零钱兑换问题有几个解&#xff08;零钱兑换 II&#xff09;Leetcode 518最优解&#xff08;零钱兑换&#xff09;- 穷举法 Leetcode 322最优解&#xff08;零钱兑换&#xff09;- 贪心法 Leetcode 322 3) Huffman …

9.5K Star,又一款超棒开源轻量自动化运维平台

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 一个好的运维平台就变得非常重要了&#xff0c;可以节省大量的人力和物…

【HarmonyOS】低代码开发—使用低代码开发服务卡片

DevEco Studio还支持使用低代码开发功能开发服务卡片&#xff0c;目前只支持JS语言&#xff0c;且compileSdkVersion必须为7或以上。 下面以创建一个新的服务卡片为例进行说明。 1.打开一个工程&#xff0c;创建服务卡片&#xff0c;创建方法包括如下两种方式&#xff1a; 选…

SpringBoot自带的tomcat的最大连接数和最大的并发数

先说结果&#xff1a;springboot自带的tomcat的最大并发数是200&#xff0c; 最大连接数是&#xff1a;max-connectionsaccept-count的值 再说一下和连接数相关的几个配置&#xff1a; 以下都是默认值&#xff1a; server.tomcat.threads.min-spare10 server.tomcat.threa…

老隋蓝海项目temu跨境电商好不好做?

近年来&#xff0c;跨境电商成为我国对外贸易的新亮点&#xff0c;其中Temu作为拼多多旗下的新兴跨境电商平台&#xff0c;吸引了众多国内卖家参与。老隋作为行业内的知名人士&#xff0c;他对Temu跨境电商项目的评价备受关注。本文将分析老隋对Temu跨境电商的看法&#xff0c;…

RDMA内核态函数ib_post_send()源码分析

最近调用linux内核下RDMA的Verb API ib_post_send()出现了问题&#xff0c;因此从源码分析一下这个函数的调用过程。 我使用的内核版本为5.15.0-94 这是函数ib_post_send的头文件定义&#xff0c;这个函数的意义是向发送队列提交发送请求&#xff0c;他会调用qp对应设备的post_…

Pyglet综合应用|推箱子游戏地图编辑器之图片跟随鼠标

目录 推箱子游戏 升级一&#xff1a;鼠标操作 升级二&#xff1a;增加网格 升级三&#xff1a;模拟按钮 综合应用&#xff1a;地图编辑器 关卡地图洗数 推箱子游戏 本篇为之前写的博客《Pyglet综合应用&#xff5c;推箱子游戏之关卡图片载入内存》的续篇&#xff0c;内容…

项目:shell实现多级菜单脚本编写

目录 1. 提示 2. 演示效果 2.1. 一级菜单 2.2. 二级菜单 2.3. 执行操作 3. 参考代码 1. 提示 本脚本主要实现多级菜单效果&#xff0c;并没有安装LAMP、LNMP环境&#xff0c;如果要用在实际生成环境中部署LNMP、LAMP环境&#xff0c;只需要简单修改一下就可以了。 2. 演…

ASCII编码的影响与作用:数字化时代的不可或缺之物

title: ASCII编码的影响与作用&#xff1a;数字化时代的不可或缺之物 date: 2024/2/25 16:03:37 updated: 2024/2/25 16:03:37 tags: ASCII起源标准化字符文本处理基础编程语言基石数据库存储标准跨平台兼容多语言编码基础 一、ASCII编码的起源 ASCII&#xff08;American St…

matlab 三质量-弹簧系统受激振力

1、内容简介 略 44-可以交流、咨询、答疑 建立系统运动方程&#xff0c;研究固有频率和对应主振型 2、内容说明 略 三质量&#xff0d;弹簧系统受激振力&#xff0c;并不考虑各自的阻尼。建立系统运动方程。 解&#xff1a;由于阻尼对固有频率没有影响&#xff0c;故本文不…

浅谈数据分析工具在智慧城市中的作用

随着城市化、技术进步和人口不断增长&#xff0c;智慧城市已成为当今世界主要技术发展之一。 智慧城市设备依靠描述模型对城市环境产生的大量数据进行数据分析。 在这种城市景观中&#xff0c;智慧城市是技术和可持续的城市地区&#xff0c;利用信息和通信技术(ICT)来改善城市…

异步http和同步http原理和差异

开发服务器端程序时&#xff0c;一种常见的需求是&#xff0c;通过向另一个http服务器发送请求&#xff0c;获得数据。最常规的作法是使用同步http请求的方式&#xff0c;过程如下 这种方式简单好用&#xff0c;但是在高并发场景下有缺陷。在单线程环境下&#xff0c;程序发送h…

linux调用so库之一

任务&#xff1a;linux系统&#xff0c;已经生成so库&#xff0c;需要调用。 参考文献&#xff1a; Linux 调用动态库&#xff08;.SO文件&#xff09;总结_linux deviceio.so-CSDN博客 可以看他的第一部分&#xff0c;即显式调用。但是会报错&#xff0c;我的版本是64位的U…

【SpringBoot】Spring常用注解总结

目录 ⭐spring springmvc和springboot的区别 Autowired 和Resource的区别和联系 1. SpringBootApplication 2. Spring Bean 相关 2.1. Autowired 2.2. Component,Repository,Service, Controller 2.3. RestController 2.4. Scope 2.5. Configuration 3. 处理常见的 HT…