目录
Kubernetes-1.22.0 可视化部署-CSDN博客
一. 环境准备
官方网站:Kubernetes
部署K8S高可用集群的官方文档:使用 kubeadm 创建高可用性集群 |Kubernetes的
主节点CPU核数必须是 ≥2核且内存要求必须≥2G,否则k8s无法启动
全部关闭防火墙和selinux,配置静态固定IP地址,这里不再写出。
主机名 | 地址 | 角色 | 配置 | 系统 |
---|---|---|---|---|
kub-k8s-master1 | 192.168.75.151 | 主节点 | 2核4G 50G | Rocky9.4mini |
kub-k8s-master2 | 192.168.75.152 | 主节点 | 2核4G 50G | Rocky9.4mini |
kub-k8s-master3 | 192.168.75.153 | 主节点 | 2核4G 50G | Rocky9.4mini |
kub-k8s-node1 | 192.168.75.154 | 工作节点 | 1核2G 50G | Rocky9.4mini |
kub-k8s-node2 | 192.168.75.155 | 工作节点/haproxy | 1核2G 50G | Rocky9.4mini |
修改主机名
# 对192.168.226.151操作
[root@localhost ~]# hostnamectl set-hostname kub-k8s-master1
# 对192.168.226.152操作
[root@localhost ~]# hostnamectl set-hostname kub-k8s-master2
# 对192.168.226.153操作
[root@localhost ~]# hostnamectl set-hostname kub-k8s-master3
# 对192.168.226.154操作
[root@localhost ~]# hostnamectl set-hostname kub-k8s-node1
# 对192.168.226.155操作
[root@localhost ~]# hostnamectl set-hostname kub-k8s-node2
下面五台主机都操作
# 配置时间同步服务
echo "server time.windows.com iburst" | sudo tee -a /etc/chrony.conf
# 配置本地解析
cat >> /etc/hosts << EOF
192.168.226.151 kub-k8s-master1
192.168.226.152 kub-k8s-master2
192.168.226.153 kub-k8s-master3
192.168.226.154 kub-k8s-node1
192.168.226.155 kub-k8s-node2
EOF
# 更换阿里镜像源
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/rocky*.repo
dnf makecache
# 关闭swap分区,Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。
swapoff -a
# 注释掉swap分区
sudo sed -i '/swap/s/^\(.*\)$/#\1/' /etc/fstab
二. 安装Docker和keepalived
五台机器都安装
# 安装keepalived
yum install -y keepalived
# 安装docker
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# Step 5:配置加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.rainbond.cc" ,
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://pilvpemn.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
三. 安装kubernetes
五台节点主机都安装部署
配置阿里云的 Kubernetes 源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
安装依赖包及常用软件包
yum install -y conntrack ipvsadm ipset iptables sysstat libseccomp net-tools git iproute bash-completion tree bridge-utils unzip bind-utils gcc
安装对应版本
yum install -y kubelet-1.22.0-0.x86_64 kubeadm-1.22.0-0.x86_64 kubectl-1.22.0-0.x86_64
四. 获取镜像
获取镜像版本方法
这里我们要使用1.22.0的版本,就用这个命令列出指定版本所需的镜像
[root@kub-k8s-master1 ~]# kubeadm config images list --kubernetes-version=1.22.0
k8s.gcr.io/kube-apiserver:v1.22.0
k8s.gcr.io/kube-controller-manager:v1.22.0
k8s.gcr.io/kube-scheduler:v1.22.0
k8s.gcr.io/kube-proxy:v1.22.0
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4
谷歌镜像[由于国内网络原因,无法下载,后续将采用阿里云镜像代替]
这些镜像都是谷歌的,国内无法访问和下载,要么使用vpn,要么在拉取时使用阿里云镜像拉取,还有就是通过别的渠道下载好,再导入本地。
接下来我这里使用阿里云的镜像来拉取下载,五台机器都操作别忘了。
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=1.22.0
如下就是其中一个机器下载好的示例:
[root@kub-k8s-master1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.aliyuncs.com/google_containers/kube-apiserver v1.22.0 838d692cbe28 3 years ago 128MB
registry.aliyuncs.com/google_containers/kube-controller-manager v1.22.0 5344f96781f4 3 years ago 122MB
registry.aliyuncs.com/google_containers/kube-scheduler v1.22.0 3db3d153007f 3 years ago 52.7MB
registry.aliyuncs.com/google_containers/kube-proxy v1.22.0 bbad1636b30d 3 years ago 104MB
registry.aliyuncs.com/google_containers/etcd 3.5.0-0 004811815584 3 years ago 295MB
registry.aliyuncs.com/google_containers/coredns v1.8.4 8d147537fb7d 3 years ago 47.6MB
registry.aliyuncs.com/google_containers/pause 3.5 ed210e3e4a5b 3 years ago 683kB
然后这里是阿里云下载的镜像,需要改一下tag
# 更改 kube-apiserver 的标签
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.0 k8s.gcr.io/kube-apiserver:v1.22.0
# 更改 kube-controller-manager 的标签
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.22.0 k8s.gcr.io/kube-controller-manager:v1.22.0
# 更改 kube-scheduler 的标签
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.22.0 k8s.gcr.io/kube-scheduler:v1.22.0
# 更改 kube-proxy 的标签
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.22.0 k8s.gcr.io/kube-proxy:v1.22.0
# 更改 pause 的标签
docker tag registry.aliyuncs.com/google_containers/pause:3.5 k8s.gcr.io/pause:3.5
# 更改 etcd 的标签
docker tag registry.aliyuncs.com/google_containers/etcd:3.5.0-0 k8s.gcr.io/etcd:3.5.0-0
# 更改 coredns 的标签
docker tag registry.aliyuncs.com/google_containers/coredns:v1.8.4 k8s.gcr.io/coredns/coredns:v1.8.4
五. 集群部署启动
本步骤五个主机都操作,不要遗漏
# 加载ipvs相关内核模块
cat <<EOF > /etc/modules-load.d/kubernetes.conf
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
# 配置转发相关参数,否则可能会出错
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
# 使配置生效
sysctl --system
# 如果net.bridge.bridge-nf-call-iptables报错,使用下面的命令加载br_netfilter模块再重启
# modprobe br_netfilter
# modprobe ip_conntrack
# sysctl -p /etc/sysctl.d/k8s.conf
# 重启使配置都生效
reboot
# 查看是否加载成功
[root@kub-k8s-master1 ~]# lsmod | grep ip_vs
ip_vs_ftp 16384 0
nf_nat 61440 1 ip_vs_ftp
ip_vs_sed 16384 0
ip_vs_nq 16384 0
ip_vs_sh 16384 0
ip_vs_dh 16384 0
ip_vs_lblcr 16384 0
ip_vs_lblc 16384 0
ip_vs_wrr 16384 0
ip_vs_rr 16384 0
ip_vs_wlc 16384 0
ip_vs_lc 16384 0
ip_vs 237568 23 ip_vs_wlc,ip_vs_rr,ip_vs_dh,ip_vs_lblcr,ip_vs_sh,ip_vs_nq,ip_vs_lblc,ip_vs_wrr,ip_vs_lc,ip_vs_sed,ip_vs_ftp
nf_conntrack 217088 2 nf_nat,ip_vs
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
libcrc32c 16384 4 nf_conntrack,nf_nat,xfs,ip_vs
配置kubelet使用pause镜像
获取docker的cgroups
配置变量:
DOCKER_CGROUPS=`docker info |grep 'Cgroup' | awk ' NR==1 {print $3}'`
# 验证查看
[root@kub-k8s-master1 ~]# echo $DOCKER_CGROUPS
systemd
# 配置kubelet的cgroups
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=k8s.gcr.io/pause:3.5"
EOF
# 启动
systemctl daemon-reload
systemctl enable kubelet && systemctl restart kubelet
#在这里使用 systemctl status kubelet 你会发现报错误信息;
10月 11 00:26:43 node1 systemd[1]: kubelet.service: main process exited, code=exited, status=255/n/a
10月 11 00:26:43 node1 systemd[1]: Unit kubelet.service entered failed state.
10月 11 00:26:43 node1 systemd[1]: kubelet.service failed.
运行 # journalctl -xefu kubelet 命令查看systemd日志才发现,真正的错误是:
unable to load client CA file /etc/kubernetes/pki/ca.crt: open /etc/kubernetes/pki/ca.crt: no such file or directory
#这个错误在运行kubeadm init 生成CA证书后会被自动解决,此处可先忽略。
#简单地说就是在kubeadm init 之前kubelet会不断重启。
六. 配置haproxy
本步骤只需要对192.168.226.151,192.168.226.152,192.168.226.153操作,即对三台master操作
# 安装haproxy,当然也可以使用lvs、nginx等
yum install -y haproxy
删除所有原有内容,输入下面的配置文件
[root@kub-k8s-master1 ~]# vim /etc/haproxy/haproxy.cfg # 三台master都操作
# Global settings section
global
log 127.0.0.1 local2 # 设置日志记录,使用本地系统日志服务
chroot /var/lib/haproxy # 设置 HAProxy 的运行环境为隔离模式
pidfile /var/run/haproxy.pid # 指定 HAProxy 进程的 PID 文件位置
maxconn 4000 # 设置最大并发连接数
user haproxy # 指定 HAProxy 运行的用户
group haproxy # 指定 HAProxy 运行的用户组
daemon # 以守护进程模式运行
# 开启状态统计的 UNIX 套接字
stats socket /var/lib/haproxy/stats
# Default settings section
defaults
mode tcp # 默认使用 TCP 模式,适用于非 HTTP 流量
log global # 使用全局日志设置
option tcplog # 开启 TCP 日志记录
timeout connect 10s # 连接超时设置
timeout client 1m # 客户端超时
timeout server 1m # 服务器超时
retries 3 # 连接重试次数
frontend stats
mode http
bind *:9000 # 监听 9000 端口,用于访问统计页面
stats enable # 启用统计报告
stats uri /haproxy_stats # 设置统计报告的 URI,可以通过 http://<your-ip>:9000/haproxy_stats 访问
stats realm HAProxy\ Statistics # 设置认证弹窗的标题
stats auth admin:123456 # 设置访问统计页面的用户名和密码,这里为 admin 和 password,您应该设置一个更安全的密码
stats admin if TRUE # 如果设置为 TRUE,允许在页面上进行管理操作
# Kubernetes Master 节点的前端配置
frontend kubernetes-frontend
bind *:8443 # 监听 8443 端口,用于 Kubernetes API
default_backend kubernetes-backend # 默认后端设置为 kubernetes-backend
# Kubernetes Master 节点的后端配置
backend kubernetes-backend
balance roundrobin # 使用轮询算法进行负载均衡
option tcp-check # 开启 TCP 检查以检测服务器健康状态
server master1 kub-k8s-master1:6443 check # Kubernetes Master 节点1
server master2 kub-k8s-master2:6443 check # Kubernetes Master 节点2
server master3 kub-k8s-master3:6443 check # Kubernetes Master 节点3
systemctl enable --now haproxy
七. 配置keepalived
本步骤需要分开配置
配置keepalived
# 对192.168.226.151,即kub-k8s-master1配置
[root@kub-k8s-master1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
# global_defs 块用于定义全局配置参数,在本示例中为空。
global_defs {
}
# vrrp_instance VI_1 定义了一个 VRRP 实例,名称为 VI_1。
vrrp_instance VI_1 {
# state 定义了实例的状态。MASTER 表示当前节点是主节点。
state MASTER
# interface 指定了 VRRP 监听的网络接口。这里使用的是 ens33。
interface ens33
# virtual_router_id 定义了虚拟路由器的 ID。所有 VRRP 节点必须使用相同的虚拟路由器 ID。
virtual_router_id 51
# priority 指定了节点的优先级。优先级值越高,该节点成为主节点的可能性越大。
priority 70
# advert_int 定义了 VRRP 通告的时间间隔,单位是秒。默认值是 1 秒。
advert_int 1
# authentication 块定义了 VRRP 实例的认证设置。
authentication {
# auth_type 设置认证类型,这里使用的是 PASS(明文密码认证)。
auth_type PASS
# auth_pass 定义了认证密码。这里的密码是 1111。
auth_pass 1111
}
# virtual_ipaddress 块定义了虚拟 IP 地址。这个 IP 地址将在主节点上配置,并由备份节点接管。
virtual_ipaddress {
192.168.226.100
}
}
# 对192.168.226.152,即kub-k8s-master2配置
[root@kub-k8s-master2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
# global_defs 块用于定义全局配置参数,在本示例中为空。
global_defs {
}
# vrrp_instance VI_1 定义了一个 VRRP 实例,名称为 VI_1。
vrrp_instance VI_1 {
# state 定义了实例的状态。BACKUP 表示当前节点是备份节点。
state BACKUP
# interface 指定了 VRRP 监听的网络接口。这里使用的是 ens33。
interface ens33
# virtual_router_id 定义了虚拟路由器的 ID。所有 VRRP 节点必须使用相同的虚拟路由器 ID。
virtual_router_id 51
# priority 指定了节点的优先级。优先级值越高,该节点成为主节点的可能性越大。
# 在 BACKUP 节点中,优先级通常较低,但仍然是配置的一部分。
priority 70 # 优先级
# advert_int 定义了 VRRP 通告的时间间隔,单位是秒。默认值是 1 秒。
advert_int 1
# authentication 块定义了 VRRP 实例的认证设置。
authentication {
# auth_type 设置认证类型,这里使用的是 PASS(明文密码认证)。
auth_type PASS
# auth_pass 定义了认证密码。这里的密码是 1111。
auth_pass 1111
}
# virtual_ipaddress 块定义了虚拟 IP 地址。这个 IP 地址将在主节点上配置,并由备份节点接管。
virtual_ipaddress {
192.168.226.100 # vip
}
}
# 对192.168.226.153,即kub-k8s-master3配置
[root@kub-k8s-master3 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
# global_defs 块用于定义全局配置参数,在本示例中为空。
global_defs {
}
# vrrp_instance VI_1 定义了一个 VRRP 实例,名称为 VI_1。
vrrp_instance VI_1 {
# state 定义了实例的状态。BACKUP 表示当前节点是备份节点。
state BACKUP
# interface 指定了 VRRP 监听的网络接口。这里使用的是 ens33。
interface ens33
# virtual_router_id 定义了虚拟路由器的 ID。所有 VRRP 节点必须使用相同的虚拟路由器 ID。
virtual_router_id 51
# priority 指定了节点的优先级。优先级值越高,该节点成为主节点的可能性越大。
# 在 BACKUP 节点中,优先级通常较低,但仍然是配置的一部分。
priority 50 # 优先级
# advert_int 定义了 VRRP 通告的时间间隔,单位是秒。默认值是 1 秒。
advert_int 1
# authentication 块定义了 VRRP 实例的认证设置。
authentication {
# auth_type 设置认证类型,这里使用的是 PASS(明文密码认证)。
auth_type PASS
# auth_pass 定义了认证密码。这里的密码是 1111。
auth_pass 1111
}
# virtual_ipaddress 块定义了虚拟 IP 地址。这个 IP 地址将在主节点上配置,并由备份节点接管。
virtual_ipaddress {
192.168.226.100 # vip
}
}
三台都设置开机自启并启动
systemctl enable --now keepalived
查看vip
[root@kub-k8s-master1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:a2:17:7e brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.226.151/24 brd 192.168.226.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.226.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea2:177e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:48:14:2b:fe brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
八. 初始化集群
仅在192.168.226.151主机执行
[root@kub-k8s-master1 ~]# kubeadm init --kubernetes-version=v1.22.0 --control-plane-endpoint "192.168.226.100:8443" --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.226.151 --apiserver-cert-extra-sans=192.168.226.151,192.168.226.152,192.168.226.153,192.168.226.100 --upload-certs
注意: 如果初始化失败或者终端卡住,就执行一下 kubeadm reset --force 进行重置
然后回到配置haproxy的配置中,将最后两行,节点2和节点3先注释掉,再重启haproxy
然后再去重新执行初始化命令。
上述代码解释:
kubeadm init \
--kubernetes-version=v1.22.0 \ # 指定 Kubernetes 版本为 v1.22.0
--control-plane-endpoint "192.168.226.100:8443" \ # 设置控制平面终端节点的 IP 地址和端口,这通常是负载均衡器的地址
--pod-network-cidr=10.244.0.0/16 \ # 指定 Pod 网络的 CIDR 范围,这里使用的是 Flannel 网络插件所需的 CIDR 范围
--apiserver-advertise-address=192.168.226.151 \ # 设置 API 服务器的广告地址,即 API 服务器对外公开的 IP 地址
--apiserver-cert-extra-sans=192.168.226.151,192.168.226.152,192.168.226.153,192.168.226.100 \ # 为 API 服务器证书添加额外的 IP 地址作为 Subject Alternative Names (SANs)
--upload-certs # 上传证书到控制平面节点,这对于集群中其他控制平面节点加入是必要的
见下图就是成功了
然后执行框里的代码,下面代理会先执行删除,避免生成过造成影响
# 删除当前用户家目录下的 .kube 目录及其内容
rm -rf $HOME/.kube
# 在当前用户家目录下创建一个新的 .kube 目录
mkdir -p $HOME/.kube
# 将 /etc/kubernetes/admin.conf 文件复制到新创建的 .kube 目录中,并命名为 config
# admin.conf 文件包含了管理员访问集群所需的配置信息
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 修改 .kube/config 文件的权限,使其属于当前用户
# 这样当前用户就可以使用 kubectl 命令行工具来管理集群
sudo chown $(id -u):$(id -g) $HOME/.kube/config
九. 配置加入集群
这里代码提示是如果是控制节点加入集群执行一号框内的命令,工作节点加入集群执行二号框内的代码。
注意:这里每个人生成的字符不一样,要看你初始化集群弹出的提示代码执行。
这里我的控制节点则192.168.226.152和192.168.226.153主机执行
# 对主机192.168.226.152操作
[root@kub-k8s-master2 ~]# kubeadm join 192.168.226.100:8443 --token udwn7x.9ld9pr2h94o2inpl \
--discovery-token-ca-cert-hash sha256:ab3447a659f1932b2deaf2eb8821d8d61c8f290166b5b81791244df70f294e9e \
--control-plane --certificate-key f0bff74f2c59c9ed25e584decfc9b7e5f2daeb894ed773b1d4cd9a9c4924189b
# 对主机192.168.226.153操作
[root@kub-k8s-master3 ~]# kubeadm join 192.168.226.100:8443 --token udwn7x.9ld9pr2h94o2inpl \
--discovery-token-ca-cert-hash sha256:ab3447a659f1932b2deaf2eb8821d8d61c8f290166b5b81791244df70f294e9e \
--control-plane --certificate-key f0bff74f2c59c9ed25e584decfc9b7e5f2daeb894ed773b1d4cd9a9c4924189b
注:如果master加入密钥忘记了,可以按照如下步骤重新生成
# 获取hash openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \ openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | \ sed 's/^.* //' # 获取密钥 sudo kubeadm init phase upload-certs --upload-certs # 生成token kubeadm token create # 让其他 Master 节点重新加入 sudo kubeadm join <master_ip>:<master_port> --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> \ --control-plane --certificate-key <新生成的证书密钥> <master_ip>:第一个 Master 节点的 IP 地址。 <master_port>:API 服务器的端口,默认是 6443。 <token>:你在 kubeadm init 或者 kubeadm token create 中生成的 token。 <hash>:在 kubeadm init 时生成的 ca-cert-hash。
这里我的工作节点则192.168.226.154和192.168.226.155主机执行
# 对192.168.226.154操作
[root@kub-k8s-node1 ~]# kubeadm join 192.168.226.100:8443 --token udwn7x.9ld9pr2h94o2inpl \
--discovery-token-ca-cert-hash sha256:ab3447a659f1932b2deaf2eb8821d8d61c8f290166b5b81791244df70f294e9e
# 对192.168.226.155操作
[root@kub-k8s-node2 ~]# kubeadm join 192.168.226.100:8443 --token udwn7x.9ld9pr2h94o2inpl \
--discovery-token-ca-cert-hash sha256:ab3447a659f1932b2deaf2eb8821d8d61c8f290166b5b81791244df70f294e9e
注意:如果工作节点的密钥忘记丢失了可以执行下述命令重新生成
kubeadm token create --print-join-command
[root@kub-k8s-master1 ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-78fcd69978-t7m9k 0/1 Pending 0 16m
kube-system coredns-78fcd69978-wfc77 0/1 Pending 0 16m
kube-system etcd-kub-k8s-master1 1/1 Running 0 16m
kube-system etcd-kub-k8s-master2 1/1 Running 0 3m21s
kube-system etcd-kub-k8s-master3 1/1 Running 0 3m3s
kube-system kube-apiserver-kub-k8s-master1 1/1 Running 0 16m
kube-system kube-apiserver-kub-k8s-master2 1/1 Running 0 3m24s
kube-system kube-apiserver-kub-k8s-master3 1/1 Running 1 (3m3s ago) 3m22s
kube-system kube-controller-manager-kub-k8s-master1 1/1 Running 4 (3m9s ago) 16m
kube-system kube-controller-manager-kub-k8s-master2 1/1 Running 2 3m24s
kube-system kube-controller-manager-kub-k8s-master3 1/1 Running 1 3m22s
kube-system kube-proxy-2mzml 1/1 Running 0 3m24s
kube-system kube-proxy-676qx 1/1 Running 0 5m23s
kube-system kube-proxy-6pw9f 1/1 Running 0 3m26s
kube-system kube-proxy-n9j4d 1/1 Running 0 5m20s
kube-system kube-proxy-v2hvv 1/1 Running 0 16m
kube-system kube-scheduler-kub-k8s-master1 1/1 Running 4 (3m10s ago) 16m
kube-system kube-scheduler-kub-k8s-master2 1/1 Running 2 3m24s
kube-system kube-scheduler-kub-k8s-master3 1/1 Running 1 3m23s
[root@kub-k8s-master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
kub-k8s-master1 NotReady control-plane,master 16m v1.22.0
kub-k8s-master2 NotReady control-plane,master 3m45s v1.22.0
kub-k8s-master3 NotReady control-plane,master 3m43s v1.22.0
kub-k8s-node1 NotReady <none> 5m42s v1.22.0
kub-k8s-node2 NotReady <none> 5m39s v1.22.0
十. 配置使用网络插件
只在192.168.226.251,即kub-k8s-master1操作。
[root@kub-k8s-master1 ~]# curl -L https://docs.projectcalico.org/v3.22/manifests/calico.yaml -O
[root@kub-k8s-master1 ~]# ll
total 224
-rw-------. 1 root root 815 Jun 6 14:00 anaconda-ks.cfg
-rw-r--r-- 1 root root 223708 Aug 12 21:38 calico.yaml
[root@kub-k8s-master1 ~]# vim calico.yaml +4205 # 在指定行插入这两行配置
- name: IP_AUTODETECTION_METHOD
value: "interface=ens33"
[root@kub-k8s-master1 ~]# kubectl apply -f calico.yaml
[root@kub-k8s-master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kub-k8s-master1 Ready control-plane,master 11m v1.22.0
kub-k8s-master2 Ready control-plane,master 11m v1.22.0
kub-k8s-master3 Ready control-plane,master 11m v1.22.0
kub-k8s-node1 Ready <none> 10m v1.22.0
kub-k8s-node2 Ready <none> 10m v1.22.0
# 这里查看需要耐心等待一会,如果配置不够会起来的慢或者起不完
[root@kub-k8s-master1 ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-7c87c5f9b8-nhcvf 1/1 Running 0 7m31s
kube-system calico-node-dzfm5 1/1 Running 0 7m31s
kube-system calico-node-k8zrr 1/1 Running 0 7m31s
kube-system calico-node-lt949 1/1 Running 0 7m31s
kube-system calico-node-sjlks 1/1 Running 0 7m31s
kube-system calico-node-wwxbl 1/1 Running 0 7m31s
kube-system coredns-78fcd69978-95ms7 1/1 Running 0 11m
kube-system coredns-78fcd69978-w5b8m 1/1 Running 0 11m
kube-system etcd-kub-k8s-master1 1/1 Running 0 11m
kube-system etcd-kub-k8s-master2 1/1 Running 0 11m
kube-system etcd-kub-k8s-master3 1/1 Running 0 10m
kube-system kube-apiserver-kub-k8s-master1 1/1 Running 0 11m
kube-system kube-apiserver-kub-k8s-master2 1/1 Running 0 11m
kube-system kube-apiserver-kub-k8s-master3 1/1 Running 1 (10m ago) 11m
kube-system kube-controller-manager-kub-k8s-master1 1/1 Running 1 (10m ago) 11m
kube-system kube-controller-manager-kub-k8s-master2 1/1 Running 0 11m
kube-system kube-controller-manager-kub-k8s-master3 1/1 Running 0 11m
kube-system kube-proxy-42qmj 1/1 Running 0 10m
kube-system kube-proxy-bd98t 1/1 Running 0 11m
kube-system kube-proxy-dwf55 1/1 Running 0 11m
kube-system kube-proxy-gz7h2 1/1 Running 0 11m
kube-system kube-proxy-tz2f4 1/1 Running 0 10m
kube-system kube-scheduler-kub-k8s-master1 1/1 Running 1 (11m ago) 11m
kube-system kube-scheduler-kub-k8s-master2 1/1 Running 0 11m
kube-system kube-scheduler-kub-k8s-master3 1/1 Running 0 11m
浏览器访问:http://192.168.226.100:9000/haproxy_stats
登录用户名:admin 登陆密码:123456 初始登录名和密码在前面配置haproxy中定义的。
十一. kubernetes命令自动补全
在三个master控制节点执行下述命令,然后在使用命令时可以通过tab键自动补全的功能。
yum install -y epel-release bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
标签:kube,Kubernetes,ip,2work,system,192.168,3master,k8s,kub
From: https://blog.csdn.net/Lzcsfg/article/details/141128805