51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

k8s 高可用集群生产环境搭建(1.24)

- K8S初始化环境准备

1.角色划分集群规划

10.0.0.241   k8s241
	master
	worker
	lb  ---> haproxy | nginx  + keepalvied
	etcd
10.0.0.242 	 k8s242
	master
	worker
	lb  ---> haproxy | nginx  + keepalvied
	etcd
10.0.0.243   k8s243
	master
	worker
	lb  ---> haproxy | nginx  + keepalvied
	etcd

2.修改主机名

[root@master231 ~]# hostnamectl set-hostname k8s241  && bash

[root@worker232 ~]# hostnamectl set-hostname k8s242  && bash

[root@worker233 ~]# hostnamectl set-hostname k8s243  && bash

3.所有节点禁用不必要的服务

3.1 禁用防火墙,网络管理,邮箱
systemctl disable  --now firewalld NetworkManager postfix

3.2 禁用selinux

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 
grep ^SELINUX= /etc/selinux/config

3.3 禁用swap分区

swapoff -a && sysctl -w vm.swappiness=0 
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
grep swap /etc/fstab

4.Linux基础优化

4.1 修改sshd服务优化

sed -ri  's@^#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config
sed -ri 's#^GSSAPIAuthentication yes#GSSAPIAuthentication no#g' /etc/ssh/sshd_config
grep ^UseDNS /etc/ssh/sshd_config 
grep ^GSSAPIAuthentication  /etc/ssh/sshd_config

4.2 修改文件打开数量的限制(退出当前会话立即生效)

cat > /etc/security/limits.d/k8s.conf <<'EOF'
*       soft    nofile     65535
*       hard    nofile    131070
EOF

检查:

ulimit -Sn
ulimit -Hn

4.3 修改终端颜色

cat <<EOF >>  ~/.bashrc 
PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \W\[\e[0m\]]# '
EOF

source ~/.bashrc

4.4 所有节点配置模块自动加载,此步骤不做的话(kubeadm init时会直接失败!)

modprobe br_netfilter
modprobe ip_conntrack
cat >>/etc/rc.sysinit<<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF
echo "modprobe br_netfilter" >/etc/sysconfig/modules/br_netfilter.modules
echo "modprobe ip_conntrack" >/etc/sysconfig/modules/ip_conntrack.modules
chmod 755 /etc/sysconfig/modules/br_netfilter.modules
chmod 755 /etc/sysconfig/modules/ip_conntrack.modules
lsmod | grep br_netfilter

全部复制 执行就可以;

4.5 所有节点配置集群时间同步

这里有2中方案, 我们选择第2种 用chronyd

(1)基于ntpdate配合crontab实现集群同步:

			4.5.1 手动同步时区和时间
yum -y install ntpdate     
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
ntpdate ntp.aliyun.com

			4.5.2 定期任务同步("crontab -e")
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com

(2)基于chronyd守护进程实现集群时间同步:

	(1)手动同步时区和时间
\cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

	(2)安装服务chrony
yum -y install ntpdate chrony

	(3)修改配置文件
vim /etc/chrony.conf 
...
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
	
	(4)启动服务
systemctl enable --now chronyd  

	(5)查看服务状态
systemctl status chronyd

5.配置软件源并安装集群常用软件

5.1 配置阿里源

curl -s -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

5.2 配置docker软件源(可跳过,因为k8s 1.24已经弃用docker-shim,因此也不需要部署docker)

curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

5.3 配置K8S软件源

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
repo_gpgcheck=0
EOF

5.4 安装集群常用软件

yum -y install expect wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git ntpdate chrony bind-utils rsync

资源文件里 白眉已经为你准备好了,可以本地安装: 可以执行下面代码:

tar xf baimei-01-linux-rpm.tar.gz && yum -y localinstall 01-linux-rpm/*.rpm

5.5 下载配置文件及脚本

git  clone  git@gitee.com:wang-huamao/baimei-linux-cloud_-native.git

6.k8s241配置免密钥登录集群并配置同步脚本

k8s241节点免密钥登录集群节点,安装过程中生成配置文件和证书均在k8s241上操作,集群管理也在k8s241上操作。

阿里云或者AWS上需要单独一台kubectl服务器。密钥配置如下:

6.1 所有节点配置hosts文件解析

cat >> /etc/hosts <<EOF
10.0.0.241 k8s241
10.0.0.242 k8s242
10.0.0.243 k8s243
EOF

6.2 配置批量免密钥登录(git下载的文件里有了)

cat > password_free_login.sh <<'EOF'
#!/bin/bash
# auther: baimeidashu.com

# 创建密钥对
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa -q

# 声明你服务器密码,建议所有节点的密码均一致,否则该脚本需要再次进行优化
export mypasswd=1

# 定义主机列表
k8s_host_list=(k8s241 k8s242 k8s243)

# 配置免密登录,利用expect工具免交互输入
for i in ${k8s_host_list[@]};do
expect -c "
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$i
  expect {
    \"*yes/no*\" {send \"yes\r\"; exp_continue}
    \"*password*\" {send \"$mypasswd\r\"; exp_continue}
  }"
done
EOF

sh password_free_login.sh

6.3 编写同步脚本

cat > /usr/local/sbin/data_rsync.sh <<'EOF'
#!/bin/bash
# Auther: baimeidashu.com

if  [ $# -ne 1 ];then
   echo "Usage: $0 /path/to/file(绝对路径)"
   exit
fi 

if [ ! -e $1 ];then
    echo "[ $1 ] dir or file not find!"
    exit
fi

fullpath=`dirname $1`

basename=`basename $1`

cd $fullpath

k8s_host_list=(k8s241 k8s242 k8s243)

for host in ${k8s_host_list[@]};do
  tput setaf 2
    echo ===== rsyncing ${host}: $basename =====
    tput setaf 7
    rsync -az $basename  `whoami`@${host}:$fullpath
    if [ $? -eq 0 ];then
      echo "命令执行成功!"
    fi
done
EOF

chmod +x /usr/local/sbin/data_rsync.sh

7.所有节点的Centos 7.9系统内核升级

7.1 所有节点升级系统并重启,此处升级建议排除内核的升级,我们后续会单独对内核手动升级,若不跳过默认安装最新版本的内核。(可跳过)

yum -y update --exclude=kernel* && reboot

这一步需要花费点时间, 20几分钟 ,这一步可以不用做。

7.2 - CentOS7需要升级内核版本为4.18+

[root@k8s241 ~]# data_rsync.sh  baimei-linux-Cloud_Native 

所有节点执行以下命令:
[root@k8s241 ~]# yum -y localinstall baimei-linux-Cloud_Native/kernel/4.19.12/*.rpm
[root@k8s242 ~]# yum -y localinstall baimei-linux-Cloud_Native/kernel/4.19.12/*.rpm
[root@k8s243 ~]# yum -y localinstall baimei-linux-Cloud_Native/kernel/4.19.12/*.rpm

7.3 所有节点更改内核的启动顺序

[root@k8s241 ~]#  grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
[root@k8s242 ~]#  grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
[root@k8s243 ~]#  grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg

7.4 检查默认的内核版本

 grubby --default-kernel

7.5 检查当前正在使用的内核版本

uname -r

重启后应该是 4.19才对


温馨提示:
(1)大家可以去官网自行下载"https://www.kernel.org/"内核文件手动升级哈,当然,也可以使用我提供的rpm包哟。
(2)截止2022年6月22日,我下载的rpm版本最新的是5.18,但是由于该版本仅仅迭代了2个版本,此处我选择迭代较多的5.17版本进行部署,这里给出的rpm包下载地址为"http://mirror.mat.mines-paristech.fr/elrepo/kernel/el7/x86_64/RPMS/"。

8.所有节点安装ipvsadm以实现kube-proxy的负载均衡

8.1 安装ipvsadm等相关工具

yum -y install ipvsadm ipset sysstat conntrack libseccomp 

8.2 创建要开机自动加载的模块配置文件

cat > /etc/modules-load.d/ipvs.conf << 'EOF'
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_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

8.3 将"systemd-modules-load"服务设置为开机自启动

systemctl enable --now systemd-modules-load && systemctl status systemd-modules-load

8.4 启动模块

lsmod | grep --color=auto -e ip_vs -e nf_conntrack

如上图所示,说明配置是成功的!

9.所有节点修改Linux内核参数调优

9.1 所有节点修改Linux内核参数调优

cat > /etc/sysctl.d/k8s.conf <<'EOF'
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF

sysctl --system

9.2 重启虚拟机

reboot

9.3 拍快照

如果所有节点都可以正常重启,说明我们的配置是正确的!接下来就是拍快照。

二- 所有节点部署containerd服务

1.升级libseccomp版本

如上图所示,在centos7中yum下载libseccomp的版本是2.3的,版本不满足我们最新containerd的需求。

综上所属,在安装containerd前,我们需要优先升级libseccomp,需要下载2.4以上的版本即可,我这里部署2.5.1版本。

1.1 卸载旧的containerd

rpm -e libseccomp-2.3.1-4.el7.x86_64 --nodeps

1.2 下载libseccomp-2.5.1版本的软件包

wget http://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/libseccomp-2.5.1-1.el8.x86_64.rpm

1.3 安装libseccomp-2.5.1软件包

rpm -ivh libseccomp-2.5.1-1.el8.x86_64.rpm 

可以直接安装 git 下载后的文件

 rpm -ivh baimei-linux-Cloud_Native/containerd/libseccomp-2.5.1-1.el8.x86_64.rpm

1.4 检查安装的版本,如下图所示,安装成功啦

rpm -qa | grep libseccomp

2.安装containerd组件 (所有节点)

2.1 下载containerd工具包

wget https://github.com/containerd/containerd/releases/download/v1.6.4/cri-containerd-cni-1.6.4-linux-amd64.tar.gz

这个包,我已经发哦到了,baimei-linux-Cloud_Native 这个项目里
2.2 解压软件包(此处我们直接让它给我们对应的目录给替换掉)
tar zvxf baimei-linux-Cloud_Native/containerd/cri-containerd-cni-1.6.4-linux-amd64.tar.gz -C /
软件包说明:
containerd-1.6.1-linux-amd64.tar.gz
只包含containerd
cri-containerd-cni-1.6.4-linux-amd64.tar.gz
包含containerd以及cri runc等相关工具包,建议下载本包。
换句话说,cri-containerd-cni会将我们整个containerd相关的依赖都进行下载下来。
温馨提示:
若有节点不安装containerd,则集群会安装失败的!
3.卸载docker(未安装可以跳过)

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

温馨提示:
K8S 1.24版本已经弃用了docker运行时,因此我们不需要安装docker服务哟。

4.每台服务器配置Containerd

4.1 创建配置文件目录

mkdir -pv /etc/containerd 

4.2 生成默认配置文件

containerd config default > /etc/containerd/config.toml

温馨提示:
配置文件的默认路径位于/etc/containerd/config.toml,我们可以使用"--config,-c"可以在启动守护程序时更改此路径。

5.替换默认pause镜像地址

sed -i 's/k8s.gcr.io/registry.cn-beijing.aliyuncs.com\/abcdocker/' /etc/containerd/config.toml 
grep sandbox_image /etc/containerd/config.toml


温馨提示:
所有节点更换默认镜像地址,我这里使用阿里云地址。

6.配置systemd作为容器的cgroup driver

sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.toml
grep SystemdCgroup /etc/containerd/config.toml

温馨提示:
所有节点配置systemd作为容器的cgroup driver。

7.配置containerd开机自启动

7.1启动containerd服务并配置开机自启动

systemctl enable --now containerd 

7.2 查看containerd状态

systemctl status containerd 

7.3 查看containerd的版本

ctr version

8.containerd的基础操作

具体的使用方法参考帮助信息"ctr -h",如上图所示。
containerd官方操作地址:
https://github.com/containerd/containerd/blob/main/docs/getting-started.md

三、API-Server高可用组件部署

1.部署nginx环境

为了方便后面扩展插件,我这里使用编译安装nginx。

先从一台安装成功后, 最后再同步到其他节点。

1.1 所有的master节点创建运行nginx的用户

useradd nginx -s /sbin/nologin -M

1.2 安装依赖

yum -y install pcre pcre-devel openssl openssl-devel gcc gcc-c++ automake autoconf libtool make

1.3 解压:

tar xf cloudnative/baimei-linux-Cloud_Native/nginx+keepalived/nginx-1.21.6.tar.gz

也可以在线下载: wget http://nginx.org/download/nginx-1.21.6.tar.gz

1.5. 配置nginx

cd nginx-1.21.6
./configure --prefix=/usr/local/nginx/ \
            --with-pcre \
            --with-http_ssl_module \
            --with-http_stub_status_module \
            --with-stream \
            --with-http_stub_status_module \
            --with-http_gzip_static_module

1.6 编译并安装nginx

make -j 4 &&  make install

1.7 使用systemctl管理,并设置开机启动

cat >/usr/lib/systemd/system/nginx.service <<'EOF'
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target sshd-keygen.service

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/sshd
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
EOF

1.8 配置nginx的开机自启动

systemctl enable --now nginx

1.9 检查nginx服务是否启动

systemctl status nginx 
ps -ef|grep nginx

1.10 同步nginx软件包和脚本到集群的其他master节点

data_rsync.sh /usr/local/nginx/
data_rsync.sh /usr/lib/systemd/system/nginx.service

2. 修改nginx的配置文件

2.1 创建nginx配置文件

cat > /usr/local/nginx/conf/nginx.conf <<'EOF'
user nginx nginx;
worker_processes auto;

events {
    worker_connections  20240;
    use epoll;
}

error_log /var/log/nginx_error.log info;

stream {
    upstream kube-servers {
        hash $remote_addr consistent;
        
        server k8s241:6443 weight=5 max_fails=1 fail_timeout=3s;
        server k8s242:6443 weight=5 max_fails=1 fail_timeout=3s;
        server k8s243:6443 weight=5 max_fails=1 fail_timeout=3s;
    }

    server {
        listen 8443 reuseport;
        proxy_connect_timeout 3s;
        proxy_timeout 3000s;
        proxy_pass kube-servers;
    }
}
EOF

2.2 同步nginx的配置文件到其他master节点

data_rsync.sh /usr/local/nginx/conf/nginx.conf

2.3 其他master节点启动nginx服务

systemctl enable --now nginx 

温馨提示:
(1)将nginx同步到其他节点后别忘记设置开机自启动。
(2)启动服务时别忘记在别的节点创建nginx用户;

3.部署keepalived

3.1 安装keepalived

tar xf /root/cloudnative/baimei-linux-Cloud_Native/nginx+keepalived/04-keepalived.tar.gz 

进入 解压后的目录:

yum -y localinstall *.rpm

也可以 在线安装
yum -y install keepalived

3.2 修改keepalive的配置文件

(1)编写配置文件,各个master节点需要执行修改router_id和mcast_src_ip的值即可。

cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
   router_id 10.0.0.241
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_port.sh 8443"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 251
    priority 100
    advert_int 1
    mcast_src_ip 10.0.0.241
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 11111111
    }
    track_script {
         chk_nginx
    }
    virtual_ipaddress {
        10.0.0.240
    }
}
EOF

232节点: router_id和mcast_src_ip 都改为 242

233节点: router_id和mcast_src_ip 改为 243就可以。

(2)各节点编写健康检查脚本

vi /etc/keepalived/check_port.sh
iCHK_PORT=$1
if [ -n "$CHK_PORT" ];then
	PORT_PROCESS=\`ss -lt|grep $CHK_PORT|wc -l\`
	if [ $PORT_PROCESS -eq 0 ];then
		echo "Port $CHK_PORT Is Not Used,End."
		exit 1
	fi
else
	echo "Check Port Cant Be Empty!"
fi

(3)启动keepalived

systemctl enable --now keepalived

然后检查一下:

systemctl status  keepalived

我们测试一下是否高可用了

在243 上直接 关闭

systemctl stop keepalived.service

然后我们在243 节点 再次启动 ,应该可以抢回 240 的IP ,抢占式

systemctl start  keepalived.service 

这样我们测试就成功了。 keepalive的 高可用集群,配置成功。

温馨提示:

	router_id:
		节点ip,master每个节点配置自己的IP
	mcast_src_ip:
		节点IP,master每个节点配置自己的IP
	virtual_ipaddress:
		虚拟IP,即VIP。

kubeadm组件初始化K8S集群

1.安装kubeadm (所有节点都安装)

因为是高可用版本,所有者3个节点都安装。 如果自己测试环境, 直接1个节点安装就足够了

1.1 k8s241节点安装kubeadm和master相关依赖组建

yum  -y install kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1

1.2 k8s241节点kubelet设置成开机启动

systemctl enable --now kubelet 
systemctl status kubelet

检查后应该是失败,因为没有初始化

1.3 检查kubectl工具版本号,如上图所示

kubectl version --client --output=yaml

2.配置kubeadm文件

2.1 在master241节点上配置打印init默认配置信息

kubeadm config print init-defaults > kubeadm-init.yaml

(2)根据默认的配置格式进行自定义修改即可

echo 10.0.0.240 master-lb >> /etc/hosts

配置一下hosts 的高可用节点

修改下边的配置文件, 主要是 主机名, 和IP 相关的

cat > kubeadm-init.yaml <<'EOF'
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  # k8s241的IP地址
  advertiseAddress: 10.0.0.241
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s241
  taints: null

---

apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
# imageRepository: k8s.gcr.io
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.24.0
controlPlaneEndpoint: master-lb:8443
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}

---

apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
# kube-proxy 模式
mode: ipvs

---

apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 0s
    cacheUnauthorizedTTL: 0s
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
# 配置 cgroup driver
cgroupDriver: systemd
logging: {}
memorySwap: {}
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s
EOF

(3)检查配置文件是否有错误,正确效果如图所示

kubeadm init --config kubeadm-init.yaml --dry-run

温馨提示:
(1)创建默认的kubeadm-config.yaml文件:
kubeadm config print init-defaults > kubeadm-config.yaml
(2)生成KubeletConfiguration示例文件
kubeadm config print init-defaults --component-configs KubeletConfiguration
(3)生成KubeProxyConfiguration示例文件
kubeadm config print init-defaults --component-configs KubeProxyConfiguration
(4)如果kubeadm-config.yaml文件的版本较低,可以尝试更新哟
kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
(5)kubeadm和etcdadm
虽然kubeadm作为etcd节点的管理工具,但请注意kubeadm不打算支持此类节点的证书轮换或升级。
长期计划是使用etcdadm来工具来进行管理。
参考链接:
https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/
3.预先拉取镜像

kubeadm config images list --config kubeadm-init.yaml

4.基于kubeadm配置文件初始化集群

如上图所示,是官方基于配置文件给出的初始化方式,参考链接:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/high-availability/

官方的初始化方式我们在部署单点的master中已经使用过了,本次我打算使用上一步生成的kubeadm-config.yaml文件来初始化:

[root@k8s241 ~]#kubeadm init --config kubeadm-init.yaml  --upload-certs


成功:

5.查看本地镜像和容器信息

ctr ns ls
查看镜像的名称空间。


ctr -n k8s.io i ls -q
查看k8s.io名称空间的镜像信息。


ctr -n k8s.io c ls
查看k8s.io名称空间的容器信息。

5.复制kubectl的kubeconfig

5.1 复制kubectl的kubeconfig,便于管理集群

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • master节点加入集群,下面的token需要跟你集群匹配,不要直接复制!
    kubeadm join master-lb:8443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:50ac74552834ee9fa6d6d5d13bbc191bfb711b0747aa0ac24d0e8d200f19b232 \
    --control-plane --certificate-key 5fa95cce3c48b15244fc21db5f7299ed01f0468f8595bb4fd001758746501546
  • 部署网络插件:
    [root@k8s241 ~]# kubectl apply -f baimei-linux-Cloud_Native/flannel/kube-flannel.yml
赞(2)
未经允许不得转载:工具盒子 » k8s 高可用集群生产环境搭建(1.24)