Kubeadm方式部署3master,2work集群(Kubernetes-1.22.0)

目录

一. 环境准备

二. 安装Docker和keepalived

三. 安装kubernetes

四. 获取镜像

五. 集群部署启动

六. 配置haproxy

七. 配置keepalived

八. 初始化集群

九. 配置加入集群

十. 配置使用网络插件

十一. kubernetes命令自动补全

Kubernetes-1.22.0 可视化部署-CSDN博客


一. 环境准备

官方网站:Kubernetes 

文档:Kubernetes 文档 | Kubernetes

部署K8S高可用集群的官方文档:使用 kubeadm 创建高可用性集群 |Kubernetes的

主节点CPU核数必须是 ≥2核且内存要求必须≥2G,否则k8s无法启动

全部关闭防火墙和selinux,配置静态固定IP地址,这里不再写出。

主机名地址角色配置系统
kub-k8s-master1192.168.75.151主节点2核4G 50GRocky9.4mini
kub-k8s-master2192.168.75.152主节点2核4G 50GRocky9.4mini
kub-k8s-master3192.168.75.153主节点2核4G 50GRocky9.4mini
kub-k8s-node1192.168.75.154工作节点1核2G 50GRocky9.4mini
kub-k8s-node2192.168.75.155工作节点/haproxy1核2G 50GRocky9.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值