diff --git a/kubernetes-HA/基于二进制构建Kubernetes高可用集群.md b/kubernetes-HA/基于二进制构建Kubernetes高可用集群.md new file mode 100644 index 0000000..925d96b --- /dev/null +++ b/kubernetes-HA/基于二进制构建Kubernetes高可用集群.md @@ -0,0 +1,1005 @@ +

基于二进制构建Kubernetes高可用集群

+ + + +作者:行癫(盗版必究) + +------ + +## 一:环境介绍 + +#### 1.主机规划 + +| IP地址 | 主机名 | 主机配置 | 主机角色 | 软件列表 | +| :---------: | :---------------------------: | :------: | :------: | :----------------------------------------------------------: | +| 10.9.12.60 | xingdiancloud-native-master-a | 2C4G | master | kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubectl、haproxy、keepalive | +| 10.9.12.64 | xingdiancloud-native-master-b | 2C4G | master | kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubectl、haproxy、keepalive | +| 10.9.12.66 | xingdiancloud-native-node-a | 2C4G | worker | kubelet、kube-proxy、docker | +| 10.9.12.65 | xingdiancloud-native-node-b | 2C4G | worker | kubelet、kube-proxy、docker | +| 10.9.12.67 | xingdiancloud-native-node-c | 2C4G | worker | kubelet、kube-proxy、docker | +| 10.9.12.100 | / | / | VIP | | + +#### 2.软件版本 + +| 软件名称 | 版本 | 备注 | +| :--------: | :-----: | :-------: | +| CentOS | 7.9 | | +| kubernetes | v1.28.0 | | +| etcd | v3.5.11 | | +| calico | v3.26.4 | | +| coredns | v1.10.1 | | +| docker | 24.0.7 | | +| haproxy | 5.18 | YUM源默认 | +| keepalived | 3.5 | YUM源默认 | + +#### 3.网络分配 + +| 网络名称 | 网段 | 备注 | +| :---------: | :-----------: | :--: | +| Node网络 | 10.9.12.0/24 | | +| Service网络 | 10.96.0.0/16 | | +| Pod网络 | 10.244.0.0/16 | | + +## 二:集群准备 + +#### 1.修改主机名 + +```shell +[root@xingdiancloud-native-master-a ~]# nmcli g hostname xingdiancloud-native-master-a +``` + +备注: + +​ 所有节点按照规划一次修改 + +#### 2.地址解析 + +```shell +[root@xingdiancloud-native-master-a ~]# cat >> /etc/hosts << EOF +10.9.12.60 xingdiancloud-native-master-a +10.9.12.64 xingdiancloud-native-master-b +10.9.12.66 xingdiancloud-native-node-a +10.9.12.65 xingdiancloud-native-node-b +10.9.12.67 xingdiancloud-native-node-c +EOF +``` + +备注: + +​ 所有节点按照规划一次修改 + +#### 3.防火墙和Selinux + +​ 全部关闭及永久关闭 + +​ 此处略 + +备注: + +​ 所有节点按照规划一次修改 + +#### 4.交换分区设置 + +```shell +[root@xingdiancloud-native-master-a ~]# swapoff -a +[root@xingdiancloud-native-master-a ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab +[root@xingdiancloud-native-master-a ~]# echo "vm.swappiness=0" >> /etc/sysctl.conf +[root@xingdiancloud-native-master-a ~]# sysctl -p +``` + +备注: + +​ 所有节点按照规划一次修改 + +#### 5.时间同步 + +```shell +[root@xingdiancloud-native-master-a ~]# yum -y install ntpdate +[root@xingdiancloud-native-master-a ~]# ntpdate -b ntp.aliyun.com +制定时间同步计划任务 +[root@xingdiancloud-native-master-a ~]# crontab -e +0 */5 * * * /usr/sbin/ntpdate -b ntp.aliyun.com +``` + +备注: + +​ 所有节点按照规划一次修改 + +#### 6.ipvs管理工具安装及模块加载 + +```shell +[root@xingdiancloud-native-master-a ~]# yum -y install ipvsadm ipset sysstat conntrack libseccomp + +#配置ipvasdm模块加载方式 +#添加需要加载的模块 +[root@xingdiancloud-native-master-a ~]# cat > /etc/sysconfig/modules/ipvs.modules << EOF +#!/bin/bash +modprobe -- ip_vs +modprobe -- ip_vs_rr +modprobe -- ip_vs_wrr +modprobe -- ip_vs_sh +modprobe -- nf_conntrack +EOF + +#授权,运行,检查是否加载 +[root@xingdiancloud-native-master-a ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack +``` + +备注: + +​ 所有节点按照规划一次修改 + +#### 7.Linux内核优化 + +添加网桥过滤及内核转发配置文件 + +```shell +[root@xingdiancloud-native-master-a ~]# cat > /etc/sysctl.d/k8s.conf < /etc/modules-load.d/containerd.conf << EOF +overlay +br_netfilter +EOF +[root@xingdiancloud-native-master-a ~]# systemctl enable --now systemd-modules-load.service +``` + +查看是否加载 + +```shell +[root@xingdiancloud-native-master-a ~]# lsmod | grep br_netfilter +br_netfilter 28672 0 +``` + +#### 8.配置免密 + +在xingdiancloud-native-master-a上操作即可,复制公钥到其他节点 + +```shell +[root@xingdiancloud-native-master-a ~]# 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:40/tHc966yq63YQ8YK84udBoZMqkCeZB5XTj8QaSOZo root@k8s-master1 +The key's randomart image is: ++---[RSA 2048]----+ +| +o= | +| +++ = | +| .o... o | +|.E . | +|.o . o So | +|+ * + o...+.. | +| + o + .o .=... | +| . .o.ooo+. +.| +| oo++.oo==+| ++----[SHA256]-----+ + +[root@xingdiancloud-native-master-a ~]# ssh-copy-id root@xingdiancloud-native-master-a +[root@xingdiancloud-native-master-a ~]# ssh-copy-id root@xingdiancloud-native-node-b +[root@xingdiancloud-native-master-a ~]# ssh-copy-id root@xingdiancloud-native-node-a +[root@xingdiancloud-native-master-a ~]# ssh-copy-id root@xingdiancloud-native-node-c +``` + +## 三:部署负载均衡高可用 + +#### 1.安装haproxy与keepalived + +在HA部署的节点上运行,本次HA部署在xingdiancloud-master-a,xingdiancloud-master-b上 + +``` +[root@xingdiancloud-native-master-a ~]# yum -y install haproxy keepalived +``` + +#### 2.HAProxy配置 + +在HA部署的节点上运行, HAProxy配置所有节点相同 + +```shell +[root@xingdiancloud-native-master-a ~]# cat >/etc/haproxy/haproxy.cfg<<"EOF" +global + maxconn 2000 + ulimit-n 16384 + log 127.0.0.1 local0 err + stats timeout 30s + +defaults + log global + mode http + option httplog + timeout connect 5000 + timeout client 50000 + timeout server 50000 + timeout http-request 15s + timeout http-keep-alive 15s + +frontend monitor-in + bind *:33305 + mode http + option httplog + monitor-uri /monitor + +frontend xingdiancloud-master + bind 0.0.0.0:6443 + bind 127.0.0.1:6443 + mode tcp + option tcplog + tcp-request inspect-delay 5s + default_backend xingdiancloud-master + +backend xingdiancloud-master + mode tcp + option tcplog + option tcp-check + balance roundrobin + default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100 + server xingdiancloud-master-a 10.9.12.60:6442 check + server xingdiancloud-master-b 10.9.12.64:6442 check +EOF +``` + +#### 3.KeepAlived配置 + +主从配置不一致,需要注意 + +Master: + +```shell +[root@xingdiancloud-native-master-a ~]# cat >/etc/keepalived/keepalived.conf<<"EOF" +! Configuration File for keepalived +global_defs { + router_id LVS_DEVEL +script_user root + enable_script_security +} +vrrp_script chk_apiserver { + script "/etc/keepalived/check_apiserver.sh" + interval 5 + weight -5 + fall 2 +rise 1 +} +vrrp_instance VI_1 { + state MASTER + interface ens3 + mcast_src_ip 10.9.12.60 + virtual_router_id 51 + priority 100 + advert_int 2 + authentication { + auth_type PASS + auth_pass K8SHA_KA_AUTH + } + virtual_ipaddress { + 10.9.12.100 + } + track_script { + chk_apiserver + } +} +EOF +``` + +Backup: + +```shell +[root@xingdiancloud-native-master-b ~]# cat >/etc/keepalived/keepalived.conf<<"EOF" +! Configuration File for keepalived +global_defs { + router_id LVS_DEVEL +script_user root + enable_script_security +} +vrrp_script chk_apiserver { + script "/etc/keepalived/check_apiserver.sh" + interval 5 + weight -5 + fall 2 +rise 1 +} +vrrp_instance VI_1 { + state BACKUP + interface ens3 + mcast_src_ip 10.9.12.64 + virtual_router_id 51 + priority 99 + advert_int 2 + authentication { + auth_type PASS + auth_pass K8SHA_KA_AUTH + } + virtual_ipaddress { + 10.9.12.100 + } + track_script { + chk_apiserver + } +} +EOF +``` + +#### 4.健康检测脚本 + +Master和Backup节点均要有 + +```shell +[root@xingdiancloud-native-master-a ~]# cat > /etc/keepalived/check_apiserver.sh <<"EOF" +#!/bin/bash +err=0 +for k in $(seq 1 2) +do + check_code=$(pgrep haproxy) + if [[ $check_code == "" ]]; then + err=$(expr $err + 1) + sleep 1 + continue + else + err=0 + break + fi +done + +if [[ $err != "0" ]]; then + echo "systemctl stop keepalived" + /usr/bin/systemctl stop keepalived + exit 1 +else + exit 0 +fi +EOF + +[root@xingdiancloud-native-master-a ~]# chmod +x /etc/keepalived/check_apiserver.sh +``` + +#### 5.启动服务并验证 + +```shell +[root@xingdiancloud-native-master-a ~]# systemctl daemon-reload +[root@xingdiancloud-native-master-a ~]# systemctl enable --now haproxy +[root@xingdiancloud-native-master-a ~]# systemctl enable --now keepalived +``` + +注意: + +​ 依次启动Master节点和Backup节点 + +验证VIP: + +```shell +[root@xingdiancloud-native-master-a ~]# ip a s +1: lo: 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 + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever +2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 00:0c:29:09:7a:32 brd ff:ff:ff:ff:ff:ff + inet 10.9.12.60/24 brd 192.168.198.255 scope global noprefixroute ens33 + valid_lft forever preferred_lft forever + inet 10.9.12.100/32 scope global ens33 + valid_lft forever preferred_lft forever + inet6 fe80::6d0d:5af:b421:6829/64 scope link noprefixroute + valid_lft forever preferred_lft forever + inet6 fe80::2dcd:beb6:b077:827d/64 scope link tentative noprefixroute dadfailed + valid_lft forever preferred_lft forever +``` + +测试网页是否正常显示: + +![image-20240616182636019](https://xingdian-home.oss-cn-beijing.aliyuncs.com/imagesimage-20240616182636019.png) + +## 四:ETCD集群部署 + +注意: + +​ 以下操作在xingdiancloud-native-master-a上操作 + +#### 1.创建工作目录 + +```shell +[root@xingdiancloud-native-master-a ~]# mkdir -p /data/k8s-work +``` + +#### 2.安装cfssl工具 + +​ https://github.com/cloudflare/cfssl/releases + +```shell +[root@xingdiancloud-native-master-a k8s-work]# ll +total 40232 +-rw-r--r-- 1 root root 16659824 Mar 9 2022 cfssl_1.6.1_linux_amd64 +-rw-r--r-- 1 root root 13502544 Mar 9 2022 cfssl-certinfo_1.6.1_linux_amd64 +-rw-r--r-- 1 root root 11029744 Mar 9 2022 cfssljson_1.6.1_linux_amd64 +# 授权可执行权限 +[root@xingdiancloud-native-master-a k8s-work]# chmod +x cfssl* +[root@xingdiancloud-native-master-a k8s-work]# ll +total 40232 +-rwxr-xr-x 1 root root 16659824 Mar 9 2022 cfssl_1.6.1_linux_amd64 +-rwxr-xr-x 1 root root 13502544 Mar 9 2022 cfssl-certinfo_1.6.1_linux_amd64 +-rwxr-xr-x 1 root root 11029744 Mar 9 2022 cfssljson_1.6.1_linux_amd64 +# 修改名称,放到/usr/local/bin目录下 +[root@xingdiancloud-native-master-a k8s-work]# mv cfssl_1.6.1_linux_amd64 /usr/local/bin/cfssl +[root@xingdiancloud-native-master-a k8s-work]# mv cfssl-certinfo_1.6.1_linux_amd64 /usr/local/bin/cfssl-certinfo +[root@xingdiancloud-native-master-a k8s-work]# mv cfssljson_1.6.1_linux_amd64 /usr/local/bin/cfssljson +# 安装完成,查看cfssl版本 +[root@k8s-master1 k8s-work]# cfssl version +Version: 1.6.1 +Runtime: go1.12.12 +``` + +#### 3.创建CA证书 + +注意: + +​ CA作为证书颁发机构 + +​ xingdiancloud-native-master-a 节点 + +##### 3.1 配置ca证书请求文件 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cat > ca-csr.json <<"EOF" +{ + "CN": "kubernetes", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "ST": "Beijing", + "L": "Beijing", + "O": "kubemsb", + "OU": "CN" + } + ], + "ca": { + "expiry": "87600h" + } +} +EOF +``` + +##### 3.2 创建ca证书 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca +2024/01/04 09:22:43 [INFO] generating a new CA key and certificate from CSR +2024/01/04 09:22:43 [INFO] generate received request +2024/01/04 09:22:43 [INFO] received CSR +2024/01/04 09:22:43 [INFO] generating key: rsa-2048 +2024/01/04 09:22:43 [INFO] encoded CSR +2024/01/04 09:22:43 [INFO] signed certificate with serial number 338731219198113317417686336532940600662573621163 + +#输出ca.csr ca-key.pem ca.pem +[root@xingdiancloud-native-master-a k8s-work]# ll +total 16 +-rw-r--r-- 1 root root 1045 Jan 4 09:22 ca.csr +-rw-r--r-- 1 root root 256 Jan 4 09:22 ca-csr.json +-rw------- 1 root root 1679 Jan 4 09:22 ca-key.pem +-rw-r--r-- 1 root root 1310 Jan 4 09:22 ca.pem +``` + +##### 3.3 配置ca证书策略 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cfssl print-defaults config > ca-config.json +cat > ca-config.json <<"EOF" +{ + "signing": { + "default": { + "expiry": "87600h" + }, + "profiles": { + "kubernetes": { + "usages": [ + "signing", + "key encipherment", + "server auth", + "client auth" + ], + "expiry": "87600h" + } + } + } +} +EOF +``` + +#### 4.创建ETCD证书 + +##### 4.1 配置etcd请求文件 + +注意: + +​ 57-59为预留IP + +``` +[root@xingdiancloud-native-master-a k8s-work]# cat > etcd-csr.json <<"EOF" +{ + "CN": "etcd", + "hosts": [ + "127.0.0.1", + "10.9.12.64", + "10.9.12.60", + "10.9.12.59", + "10.9.12.58", + "10.9.12.57" + ], + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [{ + "C": "CN", + "ST": "Beijing", + "L": "Beijing", + "O": "kubemsb", + "OU": "CN" + }] +} +EOF +``` + +##### 4.2 生成etcd证书 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd +2024/01/04 10:18:44 [INFO] generate received request +2024/01/04 10:18:44 [INFO] received CSR +2024/01/04 10:18:44 [INFO] generating key: rsa-2048 +2024/01/04 10:18:44 [INFO] encoded CSR +2024/01/04 10:18:44 [INFO] signed certificate with serial number 615580008866301102078218902811936499168508210128 +``` + +注意: + +​ 生成etcd.csr、etcd-key.pem、etcd.pem + +#### 5.部署ETCD集群 + +##### 5.1 下载etcd软件包 + +``` +https://github.com/etcd-io/etcd/releases/download/v3.5.11/etcd-v3.5.11-linux-amd64.tar.gz +``` + +##### 5.2 安装etcd软件 + +```shell +#解压etcd源码包 +[root@xingdiancloud-native-master-a k8s-work]# tar -xf etcd-v3.5.11-linux-amd64.tar.gz + +[root@xingdiancloud-native-master-a k8s-work]# cd etcd-v3.5.11-linux-amd64 +[root@xingdiancloud-native-master-a etcd-v3.5.11-linux-amd64]# ll +total 54896 +drwxr-xr-x 3 528287 89939 40 Dec 7 18:30 Documentation +-rwxr-xr-x 1 528287 89939 23535616 Dec 7 18:30 etcd +-rwxr-xr-x 1 528287 89939 17739776 Dec 7 18:30 etcdctl +-rwxr-xr-x 1 528287 89939 14864384 Dec 7 18:30 etcdutl +-rw-r--r-- 1 528287 89939 42066 Dec 7 18:30 README-etcdctl.md +-rw-r--r-- 1 528287 89939 7359 Dec 7 18:30 README-etcdutl.md +-rw-r--r-- 1 528287 89939 9394 Dec 7 18:30 README.md +-rw-r--r-- 1 528287 89939 7896 Dec 7 18:30 READMEv2-etcdctl.md + +#把etcd执行文件拷贝到/usr/local/bin目录下,后面配置文件都指定在这个文件执行命令 +[root@xingdiancloud-native-master-a etcd-v3.5.11-linux-amd64]# cp etcd* /usr/local/bin/ +#分发到其他节点 +[root@xingdiancloud-native-master-a etcd-v3.5.11-linux-amd64]# scp etcd* xingdiancloud-native-master-b:/usr/local/bin/ +etcd 100% 22MB 53.1MB/s 00:00 +etcdctl 100% 17MB 48.6MB/s 00:00 +etcdutl 100% 14MB 60.6MB/s 00:00 +``` + +##### 5.3 创建配置文件 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# mkdir /etc/etcd +``` + +xingdiancloud-native-master-a 配置: + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cat > /etc/etcd/etcd.conf < /etc/etcd/etcd.conf <<"EOF" +#[Member] +ETCD_NAME="etcd2" +ETCD_DATA_DIR="/var/lib/etcd/default.etcd" +ETCD_LISTEN_PEER_URLS="https://10.9.12.64:2380" +ETCD_LISTEN_CLIENT_URLS="https://10.9.12.64:2379,http://127.0.0.1:2379" + +#[Clustering] +ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.9.12.64:2380" +ETCD_ADVERTISE_CLIENT_URLS="https://10.9.12.64:2379" +ETCD_INITIAL_CLUSTER="etcd1=https://10.9.12.60:2380,etcd2=https://10.9.12.64:2380" +ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" +ETCD_INITIAL_CLUSTER_STATE="new" +EOF +``` + +##### 5.4 创建服务配置文件 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# mkdir -p /etc/etcd/ssl +[root@xingdiancloud-native-master-a k8s-work]# mkdir -p /var/lib/etcd/default.etcd +``` + +```shell +[root@xingdiancloud-native-master-a etcd]# cd /data/k8s-work +[root@xingdiancloud-native-master-a k8s-work]# ll +total 19896 +-rw-r--r-- 1 root root 356 Jan 4 10:03 ca-config.json +-rw-r--r-- 1 root root 1045 Jan 4 09:22 ca.csr +-rw-r--r-- 1 root root 256 Jan 4 09:22 ca-csr.json +-rw------- 1 root root 1679 Jan 4 09:22 ca-key.pem +-rw-r--r-- 1 root root 1310 Jan 4 09:22 ca.pem +-rw-r--r-- 1 root root 1078 Jan 4 10:18 etcd.csr +-rw-r--r-- 1 root root 331 Jan 4 10:16 etcd-csr.json +-rw------- 1 root root 1679 Jan 4 10:18 etcd-key.pem +-rw-r--r-- 1 root root 1452 Jan 4 10:18 etcd.pem +drwxr-xr-x 3 528287 89939 163 Dec 7 18:30 etcd-v3.5.11-linux-amd64 +-rw-r--r-- 1 root root 20334735 Dec 7 18:36 etcd-v3.5.11-linux-amd64.tar.gz +#拷贝生成的etcd,ca证书到对应ssl目录 +[root@xingdiancloud-native-master-a k8s-work]# cp ca*.pem /etc/etcd/ssl +[root@xingdiancloud-native-master-a k8s-work]# cp etcd*.pem /etc/etcd/ssl +#分发证书到其他节点 +[root@xingdiancloud-native-master-a k8s-work]# scp ca*.pem xingdiancloud-native-master-b:/etc/etcd/ssl +ca-key.pem 100% 1679 1.4MB/s 00:00 +ca.pem 100% 1310 1.0MB/s 00:00 +[root@xingdiancloud-native-master-a k8s-work]# scp etcd*.pem xingdiancloud-native-master-b:/etc/etcd/ssl +etcd-key.pem 100% 1679 1.1MB/s 00:00 +etcd.pem 100% 1452 1.2MB/s 00:00 +``` + +##### 5.5 生成etcd启动文件 + +注意: + +​ 所有etcd + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cat > /etc/systemd/system/etcd.service <<"EOF" +[Unit] +Description=Etcd Server +After=network.target +After=network-online.target +Wants=network-online.target + +[Service] +Type=notify +EnvironmentFile=-/etc/etcd/etcd.conf +WorkingDirectory=/var/lib/etcd/ +ExecStart=/usr/local/bin/etcd \ + --cert-file=/etc/etcd/ssl/etcd.pem \ + --key-file=/etc/etcd/ssl/etcd-key.pem \ + --trusted-ca-file=/etc/etcd/ssl/ca.pem \ + --peer-cert-file=/etc/etcd/ssl/etcd.pem \ + --peer-key-file=/etc/etcd/ssl/etcd-key.pem \ + --peer-trusted-ca-file=/etc/etcd/ssl/ca.pem \ + --peer-client-cert-auth \ + --client-cert-auth +Restart=on-failure +RestartSec=5 +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +EOF +``` + +##### 5.6 启动etcd集群 + +注意: + +​ 依次启动 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# systemctl daemon-reload +[root@xingdiancloud-native-master-a k8s-work]# systemctl enable --now etcd.service +[root@xingdiancloud-native-master-a k8s-work]# systemctl status etcd +● etcd.service - Etcd Server + Loaded: loaded (/etc/systemd/system/etcd.service; enabled; vendor preset: disabled) + Active: active (running) since Thu 2024-01-04 11:21:03 CST; 1min 15s ago + Main PID: 4515 (etcd) + CGroup: /system.slice/etcd.service + └─4515 /usr/local/bin/etcd --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem --trusted-ca-file=/etc/etcd/ssl/ca.pem --peer-cert... + +Jan 04 11:21:03 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:03.193129+0800","caller":"api/capability.go:75","msg":"enabled capabilit...on":"3.0"} +Jan 04 11:21:03 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:03.19358+0800","caller":"etcdserver/server.go:2066","msg":"published local member ... +Jan 04 11:21:03 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:03.1937+0800","caller":"embed/serve.go:103","msg":"ready to serve client requests"} +Jan 04 11:21:03 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:03.194023+0800","caller":"embed/serve.go:103","msg":"ready to serve client requests"} +Jan 04 11:21:03 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:03.194473+0800","caller":"embed/serve.go:187","msg":"serving client traf...0.1:2379"} +Jan 04 11:21:03 xingdiancloud-native-master-a systemd[1]: Started Etcd Server. +Jan 04 11:21:03 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:03.195005+0800","caller":"etcdmain/main.go:44","msg":"notifying init daemon"} +Jan 04 11:21:03 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:03.195052+0800","caller":"etcdmain/main.go:50","msg":"successfully notif...t daemon"} +Jan 04 11:21:03 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:03.196251+0800","caller":"embed/serve.go:250","msg":"serving client traf...146:2379"} +Jan 04 11:21:04 xingdiancloud-native-master-a etcd[4515]: {"level":"info","ts":"2024-01-04T11:21:04.065509+0800","caller":"membership/cluster.go:576","msg":"updated clus...to":"3.5"} +Hint: Some lines were ellipsized, use -l to show in full. +``` + +##### 5.7 验证集群状态 + +![image-20240616204328332](https://xingdian-home.oss-cn-beijing.aliyuncs.com/imagesimage-20240616204328332.png) + +![image-20240616204354173](https://xingdian-home.oss-cn-beijing.aliyuncs.com/imagesimage-20240616204354173.png) + +``` +#IS LEADER 为true的为主节点 +[xingdiancloud-native-master-a etcd]# ETCDCTL_API=3 /usr/local/bin/etcdctl --write-out=table --cacert=/etc/etcd/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem --key=/etc/etcd/ssl/etcd-key.pem --endpoints=https://10.9.12.60:2379,https://10.9.12.64:2379 endpoint status ++------------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | ++------------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +| https://10.9.12.60:2379 | f79986bfdb812e09 | 3.5.11 | 20 kB | true | false | 2 | 9 | 9 | | +| https://10.9.12.64:2379 | 3ed6f5bbee8d7853 | 3.5.11 | 20 kB | false | false | 2 | 9 | 9 | | ++------------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +``` + +## 五:Kubernetes集群部署 + +#### 1.Kubernetes软件包下载 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# wget https://dl.k8s.io/v1.28.0/kubernetes-server-linux-amd64.tar.gz +``` + +#### 2.Kubernetes软件包安装 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# tar -xvf kubernetes-server-linux-amd64.tar.gz +[root@xingdiancloud-native-master-a k8s-work]# cd kubernetes/server/bin/ +[root@xingdiancloud-native-master-a bin]# cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/ +``` + +#### 3.Kubernetes软件分发 + +```shell +[root@xingdiancloud-native-master-a bin]# scp kube-apiserver kube-controller-manager kube-scheduler kubectl xingdiancloud-native-master-b:/usr/local/bin/ +``` + +#### 4.在集群节点上创建目录 + +注意: + +​ Master节点创建 + +```shell +[root@xingdiancloud-native-master-a bin]# mkdir -p /etc/kubernetes/ +[root@xingdiancloud-native-master-a bin]# mkdir -p /etc/kubernetes/ssl +[root@xingdiancloud-native-master-a bin]# mkdir -p /var/log/kubernetes +``` + +#### 5.部署api-server + +##### 5.1 创建apiserver证书请求文件 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cat > kube-apiserver-csr.json << "EOF" +{ +"CN": "kubernetes", + "hosts": [ + "127.0.0.1", + "10.9.12.60", + "10.9.12.64", + "10.9.12.66", + "10.9.12.67", + "10.9.12.65", + "10.9.12.59", + "10.9.12.58", + "10.9.12.57", + "10.9.12.100", + "10.96.0.1", + "kubernetes", + "kubernetes.default", + "kubernetes.default.svc", + "kubernetes.default.svc.cluster", + "kubernetes.default.svc.cluster.local" + ], + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "ST": "Beijing", + "L": "Beijing", + "O": "kubemsb", + "OU": "CN" + } + ] +} +EOF +``` + +##### 5.2 生成apiserver证书及token文件 + +注意: + +​ 生成kube-apiserver.csr、kube-apiserver-key.pem、kube-apiserver.pem + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-apiserver-csr.json | cfssljson -bare kube-apiserver +``` + +生成token.csv + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cat > token.csv << EOF +$(head -c 16 /dev/urandom | od -An -t x | tr -d ' '),kubelet-bootstrap,10001,"system:kubelet-bootstrap" +EOF +``` + +##### 5.3 创建apiserver服务配置文件 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cat > /etc/kubernetes/kube-apiserver.conf << "EOF" +KUBE_APISERVER_OPTS="--enable-admission-plugins=NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \ + --anonymous-auth=false \ + --bind-address=10.9.12.60 \ + --advertise-address=10.9.12.60 \ + --secure-port=6442 \ + --authorization-mode=Node,RBAC \ + --runtime-config=api/all=true \ + --enable-bootstrap-token-auth \ + --service-cluster-ip-range=10.96.0.0/16 \ + --token-auth-file=/etc/kubernetes/token.csv \ + --service-node-port-range=30000-32767 \ + --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem \ + --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem \ + --client-ca-file=/etc/kubernetes/ssl/ca.pem \ + --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem \ + --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem \ + --service-account-key-file=/etc/kubernetes/ssl/ca-key.pem \ + --service-account-signing-key-file=/etc/kubernetes/ssl/ca-key.pem \ + --service-account-issuer=api \ + --etcd-cafile=/etc/etcd/ssl/ca.pem \ + --etcd-certfile=/etc/etcd/ssl/etcd.pem \ + --etcd-keyfile=/etc/etcd/ssl/etcd-key.pem \ + --etcd-servers=https://10.9.12.60:2379,https://10.9.12.64:2379 \ + --allow-privileged=true \ + --apiserver-count=3 \ + --audit-log-maxage=30 \ + --audit-log-maxbackup=3 \ + --audit-log-maxsize=100 \ + --audit-log-path=/var/log/kube-apiserver-audit.log \ + --event-ttl=1h \ + --v=4" +EOF +``` + +##### 5.4 创建apiserver服务管理配置文件 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cat > /etc/systemd/system/kube-apiserver.service << "EOF" +[Unit] +Description=Kubernetes API Server +Documentation=https://github.com/kubernetes/kubernetes +After=etcd.service +Wants=etcd.service + +[Service] +EnvironmentFile=-/etc/kubernetes/kube-apiserver.conf +ExecStart=/usr/local/bin/kube-apiserver $KUBE_APISERVER_OPTS +Restart=on-failure +RestartSec=5 +Type=notify +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +EOF +``` + +##### 5.5 同步文件到集群master节点 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# cp ca*.pem /etc/kubernetes/ssl/ + +[root@xingdiancloud-native-master-a k8s-work]# cp kube-apiserver*.pem /etc/kubernetes/ssl/ + +[root@xingdiancloud-native-master-a k8s-work]# cp token.csv /etc/kubernetes/ + +[root@xingdiancloud-native-master-a k8s-work]# scp /etc/kubernetes/ssl/ca*.pem xingdiancloud-native-master-b:/etc/kubernetes/ssl + +[root@xingdiancloud-native-master-a k8s-work]# scp /etc/kubernetes/ssl/kube-apiserver*.pem xingdiancloud-native-master-b:/etc/kubernetes/ssl + +[root@xingdiancloud-native-master-a k8s-work]# scp /etc/kubernetes/token.csv xingdiancloud-native-master-b:/etc/kubernetes +``` + +需要修改为对应主机的ip地址 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# scp /etc/kubernetes/kube-apiserver.conf xingdiancloud-native-master-b:/etc/kubernetes/kube-apiserver.conf +``` + +拷贝启动文件 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# scp /etc/systemd/system/kube-apiserver.service xingdiancloud-native-master-b:/etc/systemd/system/kube-apiserver.service +``` + +##### 5.6 启动apiserver服务 + +注意: + +​ 依次启动 apiserver 服务 + +```shell +[root@xingdiancloud-native-master-a k8s-work]# systemctl daemon-reload +[root@xingdiancloud-native-master-a k8s-work]# systemctl enable --now kube-apiserver +[root@xingdiancloud-native-master-a k8s-work]# systemctl status kube-apiserver + + +# 测试 +[root@xingdiancloud-native-master-a k8s-work]# curl --insecure https://110.9.12.60:6442/ +[root@xingdiancloud-native-master-a k8s-work]# curl --insecure https://10.9.12.64:6442/ +``` + +![image-20240616205911766](https://xingdian-home.oss-cn-beijing.aliyuncs.com/imagesimage-20240616205911766.png) + +![image-20240616205923792](https://xingdian-home.oss-cn-beijing.aliyuncs.com/imagesimage-20240616205923792.png) + + + + +