首页 > 其他分享 >Kubeadm方式部署3master,2work集群(Kubernetes-1.22.0)

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

时间:2024-08-13 17:24:45浏览次数:11  
标签:kube Kubernetes ip 2work system 192.168 3master k8s kub

目录

一. 环境准备

二. 安装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

标签:kube,Kubernetes,ip,2work,system,192.168,3master,k8s,kub
From: https://blog.csdn.net/Lzcsfg/article/details/141128805

相关文章

  • 探索 Kubernetes 持久化存储之 Rook Ceph 初窥门径
    在Kubernetes生态系统中,持久化存储是支撑业务应用稳定运行的基石,对于维护整个系统的健壮性至关重要。对于选择自主搭建Kubernetes集群的运维架构师来说,挑选合适的后端持久化存储解决方案是关键的选型决策。目前,Ceph、GlusterFS、NFS、Longhorn和openEBS等解决方案已在业界......
  • Kubernetes 中必备的 10 个告警处置方法
    本文翻译自:https://sematext.com/blog/top-10-must-have-alerts-for-kubernetes/运行Kubernetes集群,显然不止是启动,还需要持续监控,以确保Kubernetes中的服务能正常运行。不过,您不想整天盯着一堆Kubernetes仪表板(即便仪表板再多么美观)。您希望使用适当的警报来设置Kuber......
  • 国内Kubernetes安装步骤
    CentOS7上安装Kubernetes集群指南前置条件两台CentOS7服务器Master节点:192.168.50.106Worker节点:192.168.50.107每台服务器至少2CPU,2GB内存,20GB磁盘空间root访问权限1.系统准备(两台服务器都执行)#关闭防火墙systemctlstopfirewalldsystemctl......
  • kubernetes记录一起因为磁盘容量不足造成pod无线驱逐pod状态为Evicted
    线上的pod遭到无线的驱逐fxxx-xxxx-deploy-86684b76ff-2vkdx0/1Evicted030m<none>10.10.10.10<none><none>fxxx-xxxx-deploy-86684b76ff-5j6fd0/1Evicted030m<none&......
  • Kubernetes-二进制高可用部署v1.23.x
    目录高可用架构k8s集群组件ectdkube-apiserverkube-schedulerkube-controller-managerkubeletkube-proxykubectl高可用分析负载均衡节点设计1.环境准备1.1环境规划1.2所有节点配置host解析1.3安装必备工具1.4所有节点关闭防火墙、selinux、dnsmasq、swap1.5Master01节点免密......
  • 从零开始:Kubernetes 集群的搭建与配置指南,超详细,保姆级教程
    从零开始搭建Kubernetes集群从零开始搭建Kubernetes(K8s)集群部署方式准备工作(所有节点)1.关闭防火墙2.关闭SELinux3.关闭Swap分区4.设置主机名5.配置网络设置6.安装IPVS(可选,非必须)安装Docker、kubeadm、kubelet和kubectl1.安装Docker2.安装cri-docke......
  • Kubernetes-Init容器与静态Pod
    目录Init容器什么是Init容器?理解init容器Init容器与普通容器的不同之处静态Pod通过配置文件创建Init容器在Pod的生命周期中,可以执行多种操作如下图:什么是Init容器?Init容器也就是我们平时常说的初始化容器。InitContainer就是用来做初始化工作的容器,可以是一个或者多个,如果有......
  • kubernetes-POD的基本原理
    目录什么是POD?POD有以下特点:为什么使用POD作为最小单元,而不是container为什么允许一个POD里有多个容器POD中如何管理多个容器POD的yaml格式定义配置文件说明如何使用PodPOD的持久性和终止Pause我们首先在节点上运行一个pause容器然后再运行一个nginx容器,nginx将为localhost:2368......
  • 【云原生之kubernetes实战】在k8s环境下部署Note Mark笔记工具
    【云原生之kubernetes实战】在k8s环境下部署NoteMark笔记工具一、NoteMark介绍1.1NoteMark简介1.2NoteMark特点1.3NoteMark使用场景二、本次实践介绍2.1本次实践简介2.2本次环境规划2.2k8s存储介绍三、检查k8s环境3.1检查工作节点状态3......
  • 【K8s】专题九:Kubernetes 常用命令汇总
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、订阅、转发!欢迎扫码关注个人公众号!目录写在前边一、集群相关1、查看集群信息2、查看集群服务3、查看集群组件4、查看集群版本5、查看集群API版本二、节点相关1、查看节点状态2......