国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

?二進制安裝Kubernetes(k8s)v1.28.0

這篇具有很好參考價值的文章主要介紹了?二進制安裝Kubernetes(k8s)v1.28.0。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

二進制安裝Kubernetes(k8s)v1.28.0

https://github.com/cby-chen/Kubernetes 開源不易,幫忙點個star,謝謝了

強烈建議在Github上查看文檔 !??!

Github出問題會更新文檔,并且后續(xù)盡可能第一時間更新新版本文檔 ?。?!

地址:https://github.com/cby-chen/Kubernetes

平臺字數(shù)限制,內(nèi)容不全,請在Github查看全文

介紹

kubernetes(k8s)二進制高可用安裝部署,支持IPv4+IPv6雙棧。

我使用IPV6的目的是在公網(wǎng)進行訪問,所以我配置了IPV6靜態(tài)地址。

若您沒有IPV6環(huán)境,或者不想使用IPv6,不對主機進行配置IPv6地址即可。

不配置IPV6,不影響后續(xù),不過集群依舊是支持IPv6的。為后期留有擴展可能性。

若不要IPv6 ,不給網(wǎng)卡配置IPv6即可,不要對IPv6相關(guān)配置刪除或操作,否則會出問題。

1.環(huán)境

主機名稱 IP地址 說明 軟件

192.168.1.60 外網(wǎng)節(jié)點 下載各種所需安裝包
Master01 192.168.0.31 master節(jié)點 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、
kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx
Master02 192.168.0.32 master節(jié)點 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、
kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx
Master03 192.168.0.33 master節(jié)點 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、
kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx
Node01 192.168.0.34 node節(jié)點 kubelet、kube-proxy、nfs-client、nginx
Node02 192.168.0.35 node節(jié)點 kubelet、kube-proxy、nfs-client、nginx

192.168.0.36 VIP

網(wǎng)段
物理主機:192.168.0.0/24
service:10.96.0.0/12
pod:172.16.0.0/12

安裝包已經(jīng)整理好:https://ghproxy.com/https://github.com/cby-chen/Kubernetes/releases/download/v1.28.0/kubernetes-v1.28.0.tar

1.1.k8s基礎(chǔ)系統(tǒng)環(huán)境配置

1.2.配置IP

#?注意!
#?若虛擬機是進行克隆的那么網(wǎng)卡的UUID會重復
#?若UUID重復需要重新生成新的UUID
#?UUID重復無法獲取到IPV6地址
#?
#?查看當前的網(wǎng)卡列表和?UUID:
#?nmcli?con?show
#?刪除要更改?UUID?的網(wǎng)絡(luò)連接:
#?nmcli?con?delete?uuid?<原?UUID>
#?重新生成?UUID:
#?nmcli?con?add?type?ethernet?ifname?<接口名稱>?con-name?<新名稱>
#?重新啟用網(wǎng)絡(luò)連接:
#?nmcli?con?up?<新名稱>

#?更改網(wǎng)卡的UUID
ssh?root@192.168.0.31?"nmcli?con?delete?uuid?708a1497-2192-43a5-9f03-2ab936fb3c44;nmcli?con?add?type?ethernet?ifname?eth0?con-name?eth0;nmcli?con?up?eth0"
ssh?root@192.168.0.32?"nmcli?con?delete?uuid?708a1497-2192-43a5-9f03-2ab936fb3c44;nmcli?con?add?type?ethernet?ifname?eth0?con-name?eth0;nmcli?con?up?eth0"
ssh?root@192.168.0.33?"nmcli?con?delete?uuid?708a1497-2192-43a5-9f03-2ab936fb3c44;nmcli?con?add?type?ethernet?ifname?eth0?con-name?eth0;nmcli?con?up?eth0"
ssh?root@192.168.0.34?"nmcli?con?delete?uuid?708a1497-2192-43a5-9f03-2ab936fb3c44;nmcli?con?add?type?ethernet?ifname?eth0?con-name?eth0;nmcli?con?up?eth0"
ssh?root@192.168.0.35?"nmcli?con?delete?uuid?708a1497-2192-43a5-9f03-2ab936fb3c44;nmcli?con?add?type?ethernet?ifname?eth0?con-name?eth0;nmcli?con?up?eth0"



#?修改靜態(tài)的IPv4地址
ssh?root@192.168.0.154?"nmcli?con?mod?eth0?ipv4.addresses?192.168.0.31/24;?nmcli?con?mod?eth0?ipv4.gateway??192.168.0.1;?nmcli?con?mod?eth0?ipv4.method?manual;?nmcli?con?mod?eth0?ipv4.dns?"8.8.8.8";?nmcli?con?up?eth0"
ssh?root@192.168.0.156?"nmcli?con?mod?eth0?ipv4.addresses?192.168.0.32/24;?nmcli?con?mod?eth0?ipv4.gateway??192.168.0.1;?nmcli?con?mod?eth0?ipv4.method?manual;?nmcli?con?mod?eth0?ipv4.dns?"8.8.8.8";?nmcli?con?up?eth0"
ssh?root@192.168.0.164?"nmcli?con?mod?eth0?ipv4.addresses?192.168.0.33/24;?nmcli?con?mod?eth0?ipv4.gateway??192.168.0.1;?nmcli?con?mod?eth0?ipv4.method?manual;?nmcli?con?mod?eth0?ipv4.dns?"8.8.8.8";?nmcli?con?up?eth0"
ssh?root@192.168.0.166?"nmcli?con?mod?eth0?ipv4.addresses?192.168.0.34/24;?nmcli?con?mod?eth0?ipv4.gateway??192.168.0.1;?nmcli?con?mod?eth0?ipv4.method?manual;?nmcli?con?mod?eth0?ipv4.dns?"8.8.8.8";?nmcli?con?up?eth0"
ssh?root@192.168.0.167?"nmcli?con?mod?eth0?ipv4.addresses?192.168.0.35/24;?nmcli?con?mod?eth0?ipv4.gateway??192.168.0.1;?nmcli?con?mod?eth0?ipv4.method?manual;?nmcli?con?mod?eth0?ipv4.dns?"8.8.8.8";?nmcli?con?up?eth0"


#?沒有IPv6選擇不配置即可
ssh?root@192.168.0.31?"nmcli?con?mod?eth0?ipv6.addresses?fc00:43f4:1eea:1::10;?nmcli?con?mod?eth0?ipv6.gateway?fc00:43f4:1eea:1::1;?nmcli?con?mod?eth0?ipv6.method?manual;?nmcli?con?mod?eth0?ipv6.dns?"2400:3200::1";?nmcli?con?up?eth0"
ssh?root@192.168.0.32?"nmcli?con?mod?eth0?ipv6.addresses?fc00:43f4:1eea:1::20;?nmcli?con?mod?eth0?ipv6.gateway?fc00:43f4:1eea:1::1;?nmcli?con?mod?eth0?ipv6.method?manual;?nmcli?con?mod?eth0?ipv6.dns?"2400:3200::1";?nmcli?con?up?eth0"
ssh?root@192.168.0.33?"nmcli?con?mod?eth0?ipv6.addresses?fc00:43f4:1eea:1::30;?nmcli?con?mod?eth0?ipv6.gateway?fc00:43f4:1eea:1::1;?nmcli?con?mod?eth0?ipv6.method?manual;?nmcli?con?mod?eth0?ipv6.dns?"2400:3200::1";?nmcli?con?up?eth0"
ssh?root@192.168.0.34?"nmcli?con?mod?eth0?ipv6.addresses?fc00:43f4:1eea:1::40;?nmcli?con?mod?eth0?ipv6.gateway?fc00:43f4:1eea:1::1;?nmcli?con?mod?eth0?ipv6.method?manual;?nmcli?con?mod?eth0?ipv6.dns?"2400:3200::1";?nmcli?con?up?eth0"
ssh?root@192.168.0.35?"nmcli?con?mod?eth0?ipv6.addresses?fc00:43f4:1eea:1::50;?nmcli?con?mod?eth0?ipv6.gateway?fc00:43f4:1eea:1::1;?nmcli?con?mod?eth0?ipv6.method?manual;?nmcli?con?mod?eth0?ipv6.dns?"2400:3200::1";?nmcli?con?up?eth0"

#?查看網(wǎng)卡配置
#?nmcli?device?show?eth0
#?nmcli?con?show?eth0
[root@localhost?~]#?cat?/etc/sysconfig/network-scripts/ifcfg-eth0?
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=424fd260-c480-4899-97e6-6fc9722031e8
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.0.31
PREFIX=24
GATEWAY=192.168.8.1
DNS1=8.8.8.8
IPV6ADDR=fc00:43f4:1eea:1::10/128
IPV6_DEFAULTGW=fc00:43f4:1eea:1::1
DNS2=2400:3200::1
[root@localhost?~]#

1.3.設(shè)置主機名

hostnamectl?set-hostname?k8s-master01
hostnamectl?set-hostname?k8s-master02
hostnamectl?set-hostname?k8s-master03
hostnamectl?set-hostname?k8s-node01
hostnamectl?set-hostname?k8s-node02

#?參數(shù)解釋
#?
#?參數(shù):?set-hostname
#?解釋:?這是hostnamectl命令的一個參數(shù),用于設(shè)置系統(tǒng)的主機名。
#?
#?參數(shù):?k8s-master01
#?解釋:?這是要設(shè)置的主機名,將系統(tǒng)的主機名設(shè)置為"k8s-master01"。

1.4.配置yum源

#?其他系統(tǒng)的源地址
#?https://mirrors.tuna.tsinghua.edu.cn/help/

#?對于?Ubuntu
sed?-i?'s/cn.archive.ubuntu.com/mirrors.ustc.edu.cn/g'?/etc/apt/sources.list

#?對于?CentOS?7
sudo?sed?-e?'s|^mirrorlist=|#mirrorlist=|g'?\
?????????-e?'s|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g'?\
?????????-i.bak?\
?????????/etc/yum.repos.d/CentOS-*.repo

#?對于?CentOS?8
sudo?sed?-e?'s|^mirrorlist=|#mirrorlist=|g'?\
?????????-e?'s|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g'?\
?????????-i.bak?\
?????????/etc/yum.repos.d/CentOS-*.repo

#?對于私有倉庫
sed?-e?'s|^mirrorlist=|#mirrorlist=|g'?-e?'s|^#baseurl=http://mirror.centos.org/\$contentdir|baseurl=http://192.168.1.123/centos|g'?-i.bak??/etc/yum.repos.d/CentOS-*.repo

1.5.安裝一些必備工具

#?對于?Ubuntu
apt?update?&&?apt?upgrade?-y?&&?apt?install?-y?wget?psmisc?vim?net-tools?nfs-kernel-server?telnet?lvm2?git?tar?curl

#?對于?CentOS?7
yum?update?-y?&&?yum?-y?install??wget?psmisc?vim?net-tools?nfs-utils?telnet?yum-utils?device-mapper-persistent-data?lvm2?git?tar?curl

#?對于?CentOS?8
yum?update?-y?&&?yum?-y?install?wget?psmisc?vim?net-tools?nfs-utils?telnet?yum-utils?device-mapper-persistent-data?lvm2?git?network-scripts?tar?curl
1.5.1 下載離線所需文件(可選)

在互聯(lián)網(wǎng)服務(wù)器上安裝一個一模一樣的系統(tǒng)進行下載所需包

CentOS7
#?下載必要工具
yum?-y?install?createrepo?yum-utils?wget?epel*

#?下載全量依賴包
repotrack?createrepo?wget?psmisc?vim?net-tools?nfs-utils?telnet?yum-utils?device-mapper-persistent-data?lvm2?git?tar?curl?gcc?keepalived?haproxy?bash-completion?chrony?sshpass?ipvsadm?ipset?sysstat?conntrack?libseccomp

#?刪除libseccomp
rm?-rf?libseccomp-*.rpm

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

#?創(chuàng)建yum源信息
createrepo?-u?-d?/data/centos7/

#?拷貝包到內(nèi)網(wǎng)機器上
scp?-r?/data/centos7/?root@192.168.0.31:
scp?-r?/data/centos7/?root@192.168.0.32:
scp?-r?/data/centos7/?root@192.168.0.33:
scp?-r?/data/centos7/?root@192.168.0.34:
scp?-r?/data/centos7/?root@192.168.0.35:

#?在內(nèi)網(wǎng)機器上創(chuàng)建repo配置文件
rm?-rf?/etc/yum.repos.d/*
cat?>?/etc/yum.repos.d/123.repo??<<?EOF?
[cby]
name=CentOS-$releasever?-?Media
baseurl=file:///root/centos7/
gpgcheck=0
enabled=1
EOF

#?安裝下載好的包
yum?clean?all
yum?makecache
yum?install?/root/centos7/*?--skip-broken?-y

####?備注?#####
#?安裝完成后,可能還會出現(xiàn)yum無法使用那么再次執(zhí)行
rm?-rf?/etc/yum.repos.d/*
cat?>?/etc/yum.repos.d/123.repo??<<?EOF?
[cby]
name=CentOS-$releasever?-?Media
baseurl=file:///root/centos7/
gpgcheck=0
enabled=1
EOF
yum?clean?all
yum?makecache
yum?install?/root/centos7/*?--skip-broken?-y

####?備注?#####
#?安裝?chrony?和?libseccomp
#?yum?install?/root/centos7/libseccomp-2.5.1*.rpm?-y
#?yum?install?/root/centos7/chrony-*.rpm?-y
CentOS8
#?下載必要工具
yum?-y?install?createrepo?yum-utils?wget?epel*

#?下載全量依賴包
repotrack?wget?psmisc?vim?net-tools?nfs-utils?telnet?yum-utils?device-mapper-persistent-data?lvm2?git?network-scripts?tar?curl?gcc?keepalived?haproxy?bash-completion?chrony?sshpass?ipvsadm?ipset?sysstat?conntrack?libseccomp

#?創(chuàng)建yum源信息
createrepo?-u?-d?/data/centos8/

#?拷貝包到內(nèi)網(wǎng)機器上
scp?-r?centos8/?root@192.168.0.31:
scp?-r?centos8/?root@192.168.0.32:
scp?-r?centos8/?root@192.168.0.33:
scp?-r?centos8/?root@192.168.0.34:
scp?-r?centos8/?root@192.168.0.35:

#?在內(nèi)網(wǎng)機器上創(chuàng)建repo配置文件
rm?-rf?/etc/yum.repos.d/*
cat?>?/etc/yum.repos.d/123.repo??<<?EOF?
[cby]
name=CentOS-$releasever?-?Media
baseurl=file:///root/centos8/
gpgcheck=0
enabled=1
EOF

#?安裝下載好的包
yum?clean?all
yum?makecache
yum?install?/root/centos8/*?--skip-broken?-y

####?備注?#####
#?安裝完成后,可能還會出現(xiàn)yum無法使用那么再次執(zhí)行
rm?-rf?/etc/yum.repos.d/*
cat?>?/etc/yum.repos.d/123.repo??<<?EOF?
[cby]
name=CentOS-$releasever?-?Media
baseurl=file:///root/centos8/
gpgcheck=0
enabled=1
EOF
yum?clean?all
yum?makecache
yum?install?/root/centos8/*?--skip-broken?-y
Ubuntu 下載包和依賴
#!/bin/bash

logfile=123.log
ret=""
function?getDepends()
{
???echo?"fileName?is"?$1>>$logfile
???#?use?tr?to?del?<?>
???ret=`apt-cache?depends?$1|grep?Depends?|cut?-d:?-f2?|tr?-d?"<>"`
???echo?$ret|tee??-a?$logfile
}
#?需要獲取其所依賴包的包
libs="wget?psmisc?vim?net-tools?nfs-kernel-server?telnet?lvm2?git?tar?curl?gcc?keepalived?haproxy?bash-completion?chrony?sshpass?ipvsadm?ipset?sysstat?conntrack?libseccomp"

#?download?libs?dependen.?deep?in?3
i=0
while?[?$i?-lt?3?]?;
do
????let?i++
????echo?$i
????#?download?libs
????newlist="?"
????for?j?in?$libs
????do
????????added="$(getDepends?$j)"
????????newlist="$newlist?$added"
????????apt?install?$added?--reinstall?-d?-y
????done

????libs=$newlist
done

#?創(chuàng)建源信息
apt?install?dpkg-dev
sudo?cp?/var/cache/apt/archives/*.deb?/data/ubuntu/?-r
dpkg-scanpackages?.?/dev/null?|gzip?>?/data/ubuntu/Packages.gz?-r

#?拷貝包到內(nèi)網(wǎng)機器上
scp?-r?ubuntu/?root@192.168.0.31:
scp?-r?ubuntu/?root@192.168.0.32:
scp?-r?ubuntu/?root@192.168.0.33:
scp?-r?ubuntu/?root@192.168.0.34:
scp?-r?ubuntu/?root@192.168.0.35:

#?在內(nèi)網(wǎng)機器上配置apt源
vim?/etc/apt/sources.list
cat?/etc/apt/sources.list
deb?file:root/?ubuntu/

#?安裝deb包
apt?install?./*.deb

1.6.選擇性下載需要工具

#!/bin/bash

#?查看版本地址:
#?
#?https://github.com/containernetworking/plugins/releases/
#?https://github.com/containerd/containerd/releases/
#?https://github.com/kubernetes-sigs/cri-tools/releases/
#?https://github.com/Mirantis/cri-dockerd/releases/
#?https://github.com/etcd-io/etcd/releases/
#?https://github.com/cloudflare/cfssl/releases/
#?https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
#?https://download.docker.com/linux/static/stable/x86_64/
#?https://github.com/opencontainers/runc/releases/
#?https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/
#?https://github.com/helm/helm/tags
#?http://nginx.org/download/

#?Version?numbers
cni_plugins_version='v1.3.0'
cri_containerd_cni_version='1.7.3'
crictl_version='v1.28.0'
cri_dockerd_version='0.3.4'
etcd_version='v3.5.9'
cfssl_version='1.6.4'
kubernetes_server_version='1.28.0'
docker_version='24.0.5'
runc_version='1.1.9'
kernel_version='5.4.254'
helm_version='3.12.3'
nginx_version='1.25.2'

#?URLs?
base_url='https://ghproxy.com/https://github.com'
kernel_url="http://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/kernel-lt-${kernel_version}-1.el7.elrepo.x86_64.rpm"
runc_url="${base_url}/opencontainers/runc/releases/download/v${runc_version}/runc.amd64"
docker_url="https://download.docker.com/linux/static/stable/x86_64/docker-${docker_version}.tgz"
cni_plugins_url="${base_url}/containernetworking/plugins/releases/download/${cni_plugins_version}/cni-plugins-linux-amd64-${cni_plugins_version}.tgz"
cri_containerd_cni_url="${base_url}/containerd/containerd/releases/download/v${cri_containerd_cni_version}/cri-containerd-cni-${cri_containerd_cni_version}-linux-amd64.tar.gz"
crictl_url="${base_url}/kubernetes-sigs/cri-tools/releases/download/${crictl_version}/crictl-${crictl_version}-linux-amd64.tar.gz"
cri_dockerd_url="${base_url}/Mirantis/cri-dockerd/releases/download/v${cri_dockerd_version}/cri-dockerd-${cri_dockerd_version}.amd64.tgz"
etcd_url="${base_url}/etcd-io/etcd/releases/download/${etcd_version}/etcd-${etcd_version}-linux-amd64.tar.gz"
cfssl_url="${base_url}/cloudflare/cfssl/releases/download/v${cfssl_version}/cfssl_${cfssl_version}_linux_amd64"
cfssljson_url="${base_url}/cloudflare/cfssl/releases/download/v${cfssl_version}/cfssljson_${cfssl_version}_linux_amd64"
helm_url="https://mirrors.huaweicloud.com/helm/v${helm_version}/helm-v${helm_version}-linux-amd64.tar.gz"
kubernetes_server_url="https://storage.googleapis.com/kubernetes-release/release/v${kubernetes_server_version}/kubernetes-server-linux-amd64.tar.gz"
nginx_url="http://nginx.org/download/nginx-${nginx_version}.tar.gz"

#?Download?packages
packages=(
??$kernel_url
??$runc_url
??$docker_url
??$cni_plugins_url
??$cri_containerd_cni_url
??$crictl_url
??$cri_dockerd_url
??$etcd_url
??$cfssl_url
??$cfssljson_url
??$helm_url
??$kubernetes_server_url
??$nginx_url
)

for?package_url?in?"${packages[@]}";?do
??filename=$(basename?"$package_url")
??if?curl?--parallel?--parallel-immediate?-k?-L?-C?-?-o?"$filename"?"$package_url";?then
????echo?"Downloaded?$filename"
??else
????echo?"Failed?to?download?$filename"
????exit?1
??fi
done

1.7.關(guān)閉防火墻

#?Ubuntu忽略,CentOS執(zhí)行
systemctl?disable?--now?firewalld

1.8.關(guān)閉SELinux

#?Ubuntu忽略,CentOS執(zhí)行
setenforce?0
sed?-i?'s#SELINUX=enforcing#SELINUX=disabled#g'?/etc/selinux/config

#?參數(shù)解釋
#?
#?setenforce?0
#?此命令用于設(shè)置?SELinux?的執(zhí)行模式。0?表示關(guān)閉?SELinux。
#?
#?sed?-i?'s#SELINUX=enforcing#SELINUX=disabled#g'?/etc/selinux/config
#?該命令使用?sed?工具來編輯?/etc/selinux/config?文件。其中?'-i'?參數(shù)表示直接修改原文件,而不是輸出到終端或另一個文件。's#SELINUX=enforcing#SELINUX=disabled#g'?是?sed?的替換命令,它將文件中所有的?"SELINUX=enforcing"?替換為?"SELINUX=disabled"。這里的?'#'?是分隔符,用于替代傳統(tǒng)的?'/'?分隔符,以避免與路徑中的?'/'?沖突。

1.9.關(guān)閉交換分區(qū)

sed?-ri?'s/.*swap.*/#&/'?/etc/fstab
swapoff?-a?&&?sysctl?-w?vm.swappiness=0

cat?/etc/fstab
#?/dev/mapper/centos-swap?swap????????????????????swap????defaults????????0?0


#?參數(shù)解釋:
#?
#?-ri:?這個參數(shù)用于在原文件中替換匹配的模式。-r表示擴展正則表達式,-i允許直接修改文件。
#?'s/.*swap.*/#&/':?這是一個sed命令,用于在文件/etc/fstab中找到包含swap的行,并在行首添加#來注釋掉該行。
#?/etc/fstab:?這是一個文件路徑,即/etc/fstab文件,用于存儲文件系統(tǒng)表。
#?swapoff?-a:?這個命令用于關(guān)閉所有啟用的交換分區(qū)。
#?sysctl?-w?vm.swappiness=0:?這個命令用于修改vm.swappiness參數(shù)的值為0,表示系統(tǒng)在物理內(nèi)存充足時更傾向于使用物理內(nèi)存而非交換分區(qū)。

1.10.網(wǎng)絡(luò)配置(倆種方式二選一)

#?Ubuntu忽略,CentOS執(zhí)行

#?方式一
#?systemctl?disable?--now?NetworkManager
#?systemctl?start?network?&&?systemctl?enable?network

#?方式二
cat?>?/etc/NetworkManager/conf.d/calico.conf?<<?EOF?
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*
EOF
systemctl?restart?NetworkManager

#?參數(shù)解釋
#
#?這個參數(shù)用于指定不由?NetworkManager?管理的設(shè)備。它由以下兩個部分組成
#?
#?interface-name:cali*
#?表示以?"cali"?開頭的接口名稱被排除在?NetworkManager?管理之外。例如,"cali0",?"cali1"?等接口不受?NetworkManager?管理。
#?
#?interface-name:tunl*
#?表示以?"tunl"?開頭的接口名稱被排除在?NetworkManager?管理之外。例如,"tunl0",?"tunl1"?等接口不受?NetworkManager?管理。
#?
#?通過使用這個參數(shù),可以將特定的接口排除在?NetworkManager?的管理范圍之外,以便其他工具或進程可以獨立地管理和配置這些接口。

1.11.進行時間同步

#?服務(wù)端
#?apt?install?chrony?-y
yum?install?chrony?-y
cat?>?/etc/chrony.conf?<<?EOF?
pool?ntp.aliyun.com?iburst
driftfile?/var/lib/chrony/drift
makestep?1.0?3
rtcsync
allow?192.168.0.0/24
local?stratum?10
keyfile?/etc/chrony.keys
leapsectz?right/UTC
logdir?/var/log/chrony
EOF

systemctl?restart?chronyd?;?systemctl?enable?chronyd

#?客戶端
#?apt?install?chrony?-y
yum?install?chrony?-y
cat?>?/etc/chrony.conf?<<?EOF?
pool?192.168.0.31?iburst
driftfile?/var/lib/chrony/drift
makestep?1.0?3
rtcsync
keyfile?/etc/chrony.keys
leapsectz?right/UTC
logdir?/var/log/chrony
EOF

systemctl?restart?chronyd?;?systemctl?enable?chronyd

#使用客戶端進行驗證
chronyc?sources?-v

#?參數(shù)解釋
#
#?pool?ntp.aliyun.com?iburst
#?指定使用ntp.aliyun.com作為時間服務(wù)器池,iburst選項表示在初始同步時會發(fā)送多個請求以加快同步速度。
#?
#?driftfile?/var/lib/chrony/drift
#?指定用于保存時鐘漂移信息的文件路徑。
#?
#?makestep?1.0?3
#?設(shè)置當系統(tǒng)時間與服務(wù)器時間偏差大于1秒時,會以1秒的步長進行調(diào)整。如果偏差超過3秒,則立即進行時間調(diào)整。
#?
#?rtcsync
#?啟用硬件時鐘同步功能,可以提高時鐘的準確性。
#?
#?allow?192.168.0.0/24
#?允許192.168.0.0/24網(wǎng)段范圍內(nèi)的主機與chrony進行時間同步。
#?
#?local?stratum?10
#?將本地時鐘設(shè)為stratum?10,stratum值表示時鐘的準確度,值越小表示準確度越高。
#?
#?keyfile?/etc/chrony.keys
#?指定使用的密鑰文件路徑,用于對時間同步進行身份驗證。
#?
#?leapsectz?right/UTC
#?指定時區(qū)為UTC。
#?
#?logdir?/var/log/chrony
#?指定日志文件存放目錄。

1.12.配置ulimit

ulimit?-SHn?65535
cat?>>?/etc/security/limits.conf?<<EOF
*?soft?nofile?655360
*?hard?nofile?131072
*?soft?nproc?655350
*?hard?nproc?655350
*?seft?memlock?unlimited
*?hard?memlock?unlimitedd
EOF

#?參數(shù)解釋
#
#?soft?nofile?655360
#?soft表示軟限制,nofile表示一個進程可打開的最大文件數(shù),默認值為1024。這里的軟限制設(shè)置為655360,即一個進程可打開的最大文件數(shù)為655360。
#
#?hard?nofile?131072
#?hard表示硬限制,即系統(tǒng)設(shè)置的最大值。nofile表示一個進程可打開的最大文件數(shù),默認值為4096。這里的硬限制設(shè)置為131072,即系統(tǒng)設(shè)置的最大文件數(shù)為131072。
#
#?soft?nproc?655350
#?soft表示軟限制,nproc表示一個用戶可創(chuàng)建的最大進程數(shù),默認值為30720。這里的軟限制設(shè)置為655350,即一個用戶可創(chuàng)建的最大進程數(shù)為655350。
#
#?hard?nproc?655350
#?hard表示硬限制,即系統(tǒng)設(shè)置的最大值。nproc表示一個用戶可創(chuàng)建的最大進程數(shù),默認值為4096。這里的硬限制設(shè)置為655350,即系統(tǒng)設(shè)置的最大進程數(shù)為655350。
#
#?seft?memlock?unlimited
#?seft表示軟限制,memlock表示一個進程可鎖定在RAM中的最大內(nèi)存,默認值為64?KB。這里的軟限制設(shè)置為unlimited,即一個進程可鎖定的最大內(nèi)存為無限制。
#
#?hard?memlock?unlimited
#?hard表示硬限制,即系統(tǒng)設(shè)置的最大值。memlock表示一個進程可鎖定在RAM中的最大內(nèi)存,默認值為64?KB。這里的硬限制設(shè)置為unlimited,即系統(tǒng)設(shè)置的最大內(nèi)存鎖定為無限制。

1.13.配置免密登錄

#?apt?install?-y?sshpass
yum?install?-y?sshpass
ssh-keygen?-f?/root/.ssh/id_rsa?-P?''
export?IP="192.168.0.31?192.168.0.32?192.168.0.33?192.168.0.34?192.168.0.35"
export?SSHPASS=123123
for?HOST?in?$IP;do
?????sshpass?-e?ssh-copy-id?-o?StrictHostKeyChecking=no?$HOST
done

#?這段腳本的作用是在一臺機器上安裝sshpass工具,并通過sshpass自動將本機的SSH公鑰復制到多個遠程主機上,以實現(xiàn)無需手動輸入密碼的SSH登錄。
#?
#?具體解釋如下:
#?
#?1.?`apt?install?-y?sshpass`?或?`yum?install?-y?sshpass`:通過包管理器(apt或yum)安裝sshpass工具,使得后續(xù)可以使用sshpass命令。
#?
#?2.?`ssh-keygen?-f?/root/.ssh/id_rsa?-P?''`:生成SSH密鑰對。該命令會在/root/.ssh目錄下生成私鑰文件id_rsa和公鑰文件id_rsa.pub,同時不設(shè)置密碼(即-P參數(shù)后面為空),方便后續(xù)通過ssh-copy-id命令自動復制公鑰。
#?
#?3.?`export?IP="192.168.0.31?192.168.0.32?192.168.0.33?192.168.0.34?192.168.0.35"`:設(shè)置一個包含多個遠程主機IP地址的環(huán)境變量IP,用空格分隔開,表示要將SSH公鑰復制到這些遠程主機上。
#?
#?4.?`export?SSHPASS=123123`:設(shè)置環(huán)境變量SSHPASS,將sshpass所需的SSH密碼(在這里是"123123")賦值給它,這樣sshpass命令可以自動使用這個密碼進行登錄。
#?
#?5.?`for?HOST?in?$IP;do`:遍歷環(huán)境變量IP中的每個IP地址,并將當前IP地址賦值給變量HOST。
#?
#?6.?`sshpass?-e?ssh-copy-id?-o?StrictHostKeyChecking=no?$HOST`:使用sshpass工具復制本機的SSH公鑰到遠程主機。其中,-e選項表示使用環(huán)境變量中的密碼(即SSHPASS)進行登錄,-o?StrictHostKeyChecking=no選項表示連接時不檢查遠程主機的公鑰,以避免交互式確認。
#?
#?通過這段腳本,可以方便地將本機的SSH公鑰復制到多個遠程主機上,實現(xiàn)無需手動輸入密碼的SSH登錄。

1.14.添加啟用源

#?Ubuntu忽略,CentOS執(zhí)行

#?為?RHEL-8或?CentOS-8配置源
yum?install?https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm?-y?
sed?-i?"s@mirrorlist@#mirrorlist@g"?/etc/yum.repos.d/elrepo.repo?
sed?-i?"s@elrepo.org/linux@mirrors.tuna.tsinghua.edu.cn/elrepo@g"?/etc/yum.repos.d/elrepo.repo?

#?為?RHEL-7?SL-7?或?CentOS-7?安裝?ELRepo?
yum?install?https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm?-y?
sed?-i?"s@mirrorlist@#mirrorlist@g"?/etc/yum.repos.d/elrepo.repo?
sed?-i?"s@elrepo.org/linux@mirrors.tuna.tsinghua.edu.cn/elrepo@g"?/etc/yum.repos.d/elrepo.repo?

#?查看可用安裝包
yum??--disablerepo="*"??--enablerepo="elrepo-kernel"??list??available

1.15.升級內(nèi)核至4.18版本以上

#?Ubuntu忽略,CentOS執(zhí)行

#?安裝最新的內(nèi)核
#?我這里選擇的是穩(wěn)定版kernel-ml???如需更新長期維護版本kernel-lt??
yum?-y?--enablerepo=elrepo-kernel??install??kernel-ml

#?查看已安裝那些內(nèi)核
rpm?-qa?|?grep?kernel

#?查看默認內(nèi)核
grubby?--default-kernel

#?若不是最新的使用命令設(shè)置
grubby?--set-default?$(ls?/boot/vmlinuz-*?|?grep?elrepo)

#?重啟生效
reboot

#?v8?整合命令為:
yum?install?https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm?-y?;?sed?-i?"s@mirrorlist@#mirrorlist@g"?/etc/yum.repos.d/elrepo.repo?;?sed?-i?"s@elrepo.org/linux@mirrors.tuna.tsinghua.edu.cn/elrepo@g"?/etc/yum.repos.d/elrepo.repo?;?yum??--disablerepo="*"??--enablerepo="elrepo-kernel"??list??available?-y?;?yum??--enablerepo=elrepo-kernel??install?kernel-lt?-y?;?grubby?--default-kernel?;?reboot?

#?v7?整合命令為:
yum?install?https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm?-y?;?sed?-i?"s@mirrorlist@#mirrorlist@g"?/etc/yum.repos.d/elrepo.repo?;?sed?-i?"s@elrepo.org/linux@mirrors.tuna.tsinghua.edu.cn/elrepo@g"?/etc/yum.repos.d/elrepo.repo?;?yum??--disablerepo="*"??--enablerepo="elrepo-kernel"??list??available?-y?;?yum??--enablerepo=elrepo-kernel??install??kernel-lt?-y?;?grubby?--set-default?$(ls?/boot/vmlinuz-*?|?grep?elrepo)?;?grubby?--default-kernel?;?reboot?

#?離線版本?
yum?install?-y?/root/cby/kernel-lt-*-1.el7.elrepo.x86_64.rpm?;?grubby?--set-default?$(ls?/boot/vmlinuz-*?|?grep?elrepo)?;?grubby?--default-kernel?;?reboot

1.16.安裝ipvsadm

#?對于CentOS7離線安裝
#?yum?install?/root/centos7/ipset-*.el7.x86_64.rpm?/root/centos7/lm_sensors-libs-*.el7.x86_64.rpm??/root/centos7/ipset-libs-*.el7.x86_64.rpm?/root/centos7/sysstat-*.el7_9.x86_64.rpm??/root/centos7/ipvsadm-*.el7.x86_64.rpm??-y

#?對于?Ubuntu
#?apt?install?ipvsadm?ipset?sysstat?conntrack?-y

#?對于?CentOS
yum?install?ipvsadm?ipset?sysstat?conntrack?libseccomp?-y
cat?>>?/etc/modules-load.d/ipvs.conf?<<EOF?
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

systemctl?restart?systemd-modules-load.service

lsmod?|?grep?-e?ip_vs?-e?nf_conntrack
ip_vs_sh???????????????16384??0
ip_vs_wrr??????????????16384??0
ip_vs_rr???????????????16384??0
ip_vs?????????????????180224??6?ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack??????????176128??1?ip_vs
nf_defrag_ipv6?????????24576??2?nf_conntrack,ip_vs
nf_defrag_ipv4?????????16384??1?nf_conntrack
libcrc32c??????????????16384??3?nf_conntrack,xfs,ip_vs

1.17.修改內(nèi)核參數(shù)

cat?<<EOF?>?/etc/sysctl.d/k8s.conf
net.ipv4.ip_forward?=?1
net.bridge.bridge-nf-call-iptables?=?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

net.ipv6.conf.all.disable_ipv6?=?0
net.ipv6.conf.default.disable_ipv6?=?0
net.ipv6.conf.lo.disable_ipv6?=?0
net.ipv6.conf.all.forwarding?=?1
EOF

sysctl?--system

1.18.所有節(jié)點配置hosts本地解析

cat?>?/etc/hosts?<<EOF
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6

192.168.0.31?k8s-master01
192.168.0.32?k8s-master02
192.168.0.33?k8s-master03
192.168.0.34?k8s-node01
192.168.0.35?k8s-node02
192.168.0.36?lb-vip
EOF

2.k8s基本組件安裝

注意 : ?2.1 和 2.2 二選其一即可

2.1.安裝Containerd作為Runtime (推薦)

#?https://github.com/containernetworking/plugins/releases/
#?wget?https://ghproxy.com/https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz

cd?cby/

#創(chuàng)建cni插件所需目錄
mkdir?-p?/etc/cni/net.d?/opt/cni/bin?
#解壓cni二進制包
tar?xf?cni-plugins-linux-amd64-v*.tgz?-C?/opt/cni/bin/

#?https://github.com/containerd/containerd/releases/
#?wget?https://ghproxy.com/https://github.com/containerd/containerd/releases/download/v1.7.3/cri-containerd-cni-1.7.3-linux-amd64.tar.gz

#解壓
tar?-xzf?cri-containerd-cni-*-linux-amd64.tar.gz?-C?/

#創(chuàng)建服務(wù)啟動文件
cat?>?/etc/systemd/system/containerd.service?<<EOF
[Unit]
Description=containerd?container?runtime
Documentation=https://containerd.io
After=network.target?local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe?overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target
EOF

2.1.1配置Containerd所需的模塊

cat?<<EOF?|?sudo?tee?/etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

2.1.2加載模塊

systemctl?restart?systemd-modules-load.service

2.1.3配置Containerd所需的內(nèi)核

cat?<<EOF?|?sudo?tee?/etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables??=?1
net.ipv4.ip_forward?????????????????=?1
net.bridge.bridge-nf-call-ip6tables?=?1
EOF

#?加載內(nèi)核
sysctl?--system

2.1.4創(chuàng)建Containerd的配置文件

#?創(chuàng)建默認配置文件
mkdir?-p?/etc/containerd
containerd?config?default?|?tee?/etc/containerd/config.toml

#?修改Containerd的配置文件
sed?-i?"s#SystemdCgroup\?\=\?false#SystemdCgroup\?\=\?true#g"?/etc/containerd/config.toml
cat?/etc/containerd/config.toml?|?grep?SystemdCgroup
sed?-i?"s#registry.k8s.io#m.daocloud.io/registry.k8s.io#g"?/etc/containerd/config.toml
cat?/etc/containerd/config.toml?|?grep?sandbox_image
sed?-i?"s#config_path\?\=\?\"\"#config_path\?\=\?\"/etc/containerd/certs.d\"#g"?/etc/containerd/config.toml
cat?/etc/containerd/config.toml?|?grep?certs.d

#?配置加速器
mkdir?/etc/containerd/certs.d/docker.io?-pv
cat?>?/etc/containerd/certs.d/docker.io/hosts.toml?<<?EOF
server?=?"https://docker.io"
[host."https://hub-mirror.c.163.com"]
??capabilities?=?["pull",?"resolve"]
EOF

2.1.5啟動并設(shè)置為開機啟動

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?containerd.service
#?啟用并立即啟動docker.service單元。docker.service是Docker守護進程的systemd服務(wù)單元。

systemctl?stop?containerd.service
#?停止運行中的docker.service單元,即停止Docker守護進程。

systemctl?start?containerd.service
#?啟動docker.service單元,即啟動Docker守護進程。

systemctl?restart?containerd.service
#?重啟docker.service單元,即重新啟動Docker守護進程。

systemctl?status?containerd.service
#?顯示docker.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

2.1.6配置crictl客戶端連接的運行時位置

#?https://github.com/kubernetes-sigs/cri-tools/releases/
#?wget?https://ghproxy.com/https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.28.0/crictl-v1.28.0-linux-amd64.tar.gz

#解壓
tar?xf?crictl-v*-linux-amd64.tar.gz?-C?/usr/bin/
#生成配置文件
cat?>?/etc/crictl.yaml?<<EOF
runtime-endpoint:?unix:///run/containerd/containerd.sock
image-endpoint:?unix:///run/containerd/containerd.sock
timeout:?10
debug:?false
EOF

#測試
systemctl?restart??containerd
crictl?info

2.2 安裝docker作為Runtime

2.2.1 解壓docker程序

#?二進制包下載地址:https://download.docker.com/linux/static/stable/x86_64/
#?wget?https://download.docker.com/linux/static/stable/x86_64/docker-24.0.5.tgz

#解壓
tar?xf?docker-*.tgz?
#拷貝二進制文件
cp?docker/*?/usr/bin/

2.2.2 創(chuàng)建containerd的service文件

#創(chuàng)建containerd的service文件,并且啟動
cat?>/etc/systemd/system/containerd.service?<<EOF
[Unit]
Description=containerd?container?runtime
Documentation=https://containerd.io
After=network.target?local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe?overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target
EOF


#?設(shè)置開機自啟
systemctl?enable?--now?containerd.service

2.2.3 準備docker的service文件

#準備docker的service文件
cat?>?/etc/systemd/system/docker.service?<<EOF
[Unit]
Description=Docker?Application?Container?Engine
Documentation=https://docs.docker.com
After=network-online.target?firewalld.service?containerd.service
Wants=network-online.target
Requires=docker.socket?containerd.service

[Service]
Type=notify
ExecStart=/usr/bin/dockerd?-H?fd://?--containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill?-s?HUP?$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target
EOF

2.2.4 準備docker的socket文件

#準備docker的socket文件
cat?>?/etc/systemd/system/docker.socket?<<EOF
[Unit]
Description=Docker?Socket?for?the?API

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

2.2.5 配置加速器

#?配置加速器
mkdir?/etc/docker/?-pv
cat?>/etc/docker/daemon.json?<<EOF
{
??"exec-opts":?["native.cgroupdriver=systemd"],
??"registry-mirrors":?[
????"https://docker.mirrors.ustc.edu.cn/"
??],
??"max-concurrent-downloads":?10,
??"log-driver":?"json-file",
??"log-level":?"warn",
??"log-opts":?{
????"max-size":?"10m",
????"max-file":?"3"
????},
??"data-root":?"/var/lib/docker"
}
EOF

2.2.6 啟動docker

groupadd?docker
#創(chuàng)建docker組

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?docker.socket
#?啟用并立即啟動docker.socket單元。docker.socket是一個systemd的socket單元,用于接收來自網(wǎng)絡(luò)的Docker?API請求。

systemctl?enable?--now?docker.service
#?啟用并立即啟動docker.service單元。docker.service是Docker守護進程的systemd服務(wù)單元。

systemctl?stop?docker.service
#?停止運行中的docker.service單元,即停止Docker守護進程。

systemctl?start?docker.service
#?啟動docker.service單元,即啟動Docker守護進程。

systemctl?restart?docker.service
#?重啟docker.service單元,即重新啟動Docker守護進程。

systemctl?status?docker.service
#?顯示docker.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

docker?info
#驗證

2.2.7 解壓cri-docker

#?由于1.24以及更高版本不支持docker所以安裝cri-docker
#?下載cri-docker?
#?https://github.com/Mirantis/cri-dockerd/releases/
#?wget??https://ghproxy.com/https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz

#?解壓cri-docker
tar?xvf?cri-dockerd-*.amd64.tgz?
cp?-r?cri-dockerd/??/usr/bin/
chmod?+x?/usr/bin/cri-dockerd/cri-dockerd

2.2.8 寫入啟動cri-docker配置文件

#?寫入啟動配置文件
cat?>??/usr/lib/systemd/system/cri-docker.service?<<EOF
[Unit]
Description=CRI?Interface?for?Docker?Application?Container?Engine
Documentation=https://docs.mirantis.com
After=network-online.target?firewalld.service?docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd/cri-dockerd?--network-plugin=cni?--pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill?-s?HUP?$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

2.2.9 寫入cri-docker的socket配置文件

#?寫入socket配置文件
cat?>?/usr/lib/systemd/system/cri-docker.socket?<<EOF
[Unit]
Description=CRI?Docker?Socket?for?the?API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF


#?該配置文件是用于systemd的單元配置文件(unit?file),用于定義一個socket單元。
#?
#?[Unit]
#?-?Description:表示該單元的描述信息。
#?-?PartOf:表示該單元是cri-docker.service的一部分。
#?
#?[Socket]
#?-?ListenStream:指定了該socket要監(jiān)聽的地址和端口,這里使用了%t占位符,表示根據(jù)單元的類型來決定路徑。%t/cri-dockerd.sock表示將監(jiān)聽Unix域套接字cri-dockerd.sock。Unix域套接字用于在同一臺主機上的進程之間通信。
#?-?SocketMode:指定了socket文件的權(quán)限模式,此處為0660,即用戶和用戶組有讀寫權(quán)限,其他用戶無權(quán)限。
#?-?SocketUser:指定了socket文件的所有者,此處為root用戶。
#?-?SocketGroup:指定了socket文件的所屬用戶組,此處為docker用戶組。
#?
#?[Install]
#?-?WantedBy:部分定義了該單元的安裝配置信息。WantedBy=sockets.target表示當sockets.target單元啟動時,自動啟動該socket單元。sockets.target是一個系統(tǒng)服務(wù),用于管理所有的socket單元。

2.2.10 啟動cri-docker

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?cri-docker.service
#?啟用并立即啟動cri-docker.service單元。cri-docker.service是cri-docker守護進程的systemd服務(wù)單元。

systemctl?restart?cri-docker.service
#?重啟cri-docker.service單元,即重新啟動cri-docker守護進程。

systemctl?status?docker.service
#?顯示docker.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

2.3.k8s與etcd下載及安裝(僅在master01操作)

2.3.1解壓k8s安裝包

#?下載安裝包
#?wget?https://ghproxy.com/https://github.com/etcd-io/etcd/releases/download/v3.5.9/etcd-v3.5.9-linux-amd64.tar.gz
#?wget?https://storage.googleapis.com/kubernetes-release/release/v1.28.0/kubernetes-server-linux-amd64.tar.gz

#?解壓k8s安裝文件
cd?cby
tar?-xf?kubernetes-server-linux-amd64.tar.gz??--strip-components=3?-C?/usr/local/bin?kubernetes/server/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}

#?這是一個tar命令,用于解壓指定的kubernetes-server-linux-amd64.tar.gz文件,并將其中的特定文件提取到/usr/local/bin目錄下。
#?
#?命令的解釋如下:
#?-?tar:用于處理tar壓縮文件的命令。
#?-?-xf:表示解壓操作。
#?-?kubernetes-server-linux-amd64.tar.gz:要解壓的文件名。
#?-?--strip-components=3:表示解壓時忽略壓縮文件中的前3級目錄結(jié)構(gòu),提取文件時直接放到目標目錄中。
#?-?-C?/usr/local/bin:指定提取文件的目標目錄為/usr/local/bin。
#?-?kubernetes/server/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}:要解壓和提取的文件名模式,用花括號括起來表示模式中的多個可能的文件名。
#?
#?總的來說,這個命令的作用是將kubernetes-server-linux-amd64.tar.gz文件中的kubelet、kubectl、kube-apiserver、kube-controller-manager、kube-scheduler和kube-proxy六個文件提取到/usr/local/bin目錄下,同時忽略文件路徑中的前三級目錄結(jié)構(gòu)。


#?解壓etcd安裝文件
tar?-xf?etcd*.tar.gz?&&?mv?etcd-*/etcd?/usr/local/bin/?&&?mv?etcd-*/etcdctl?/usr/local/bin/

#?這是一個將文件解壓并移動到特定目錄的命令。這是一個用于?Linux?系統(tǒng)中的命令。
#?
#?-?tar?-xf?etcd*.tar.gz:這個命令將解壓以?etcd?開頭并以.tar.gz?結(jié)尾的文件。`-xf`?是使用?`tar`?命令的選項,它表示解壓文件并展開其中的內(nèi)容。
#?-?mv?etcd-*/etcd?/usr/local/bin/:這個命令將?etcd?文件移動到?/usr/local/bin?目錄。`mv`?是移動命令,它將?etcd-*/etcd?路徑下的?etcd?文件移動到了?/usr/local/bin?目錄。
#?-?mv?etcd-*/etcdctl?/usr/local/bin/:這個命令將?etcdctl?文件移動到?/usr/local/bin?目錄,和上一條命令類似。
#?
#?總結(jié)起來,以上命令將從名為?etcd*.tar.gz?的壓縮文件中解壓出?etcd?和?etcdctl?文件,并將它們移動到?/usr/local/bin?目錄中。

#?查看/usr/local/bin下內(nèi)容
ls?/usr/local/bin/
containerd???????????????crictl???????etcdctl??????????????????kube-proxy
containerd-shim??????????critest??????kube-apiserver???????????kube-scheduler
containerd-shim-runc-v1??ctd-decoder??kube-controller-manager
containerd-shim-runc-v2??ctr??????????kubectl
containerd-stress????????etcd?????????kubelet

2.3.2查看版本

[root@k8s-master01?~]#??kubelet?--version
Kubernetes?v1.28.0
[root@k8s-master01?~]#?etcdctl?version
etcdctl?version:?3.5.9
API?version:?3.5
[root@k8s-master01?~]#

2.3.3將組件發(fā)送至其他k8s節(jié)點

Master='k8s-master02?k8s-master03'
Work='k8s-node01?k8s-node02'

#?拷貝master組件
for?NODE?in?$Master;?do?echo?$NODE;?scp?/usr/local/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}?$NODE:/usr/local/bin/;?scp?/usr/local/bin/etcd*?$NODE:/usr/local/bin/;?done

#?該命令是一個for循環(huán),對于在$Master變量中的每個節(jié)點,執(zhí)行以下操作:
#?
#?1.?打印出節(jié)點的名稱。
#?2.?使用scp命令將/usr/local/bin/kubelet、kubectl、kube-apiserver、kube-controller-manager、kube-scheduler和kube-proxy文件復制到節(jié)點的/usr/local/bin/目錄下。
#?3.?使用scp命令將/usr/local/bin/etcd*文件復制到節(jié)點的/usr/local/bin/目錄下。


#?拷貝work組件
for?NODE?in?$Work;?do?echo?$NODE;?scp?/usr/local/bin/kube{let,-proxy}?$NODE:/usr/local/bin/?;?done
#?該命令是一個for循環(huán),對于在$Master變量中的每個節(jié)點,執(zhí)行以下操作:
#?
#?1.?打印出節(jié)點的名稱。
#?2.?使用scp命令將/usr/local/bin/kubelet和kube-proxy文件復制到節(jié)點的/usr/local/bin/目錄下。

#?所有節(jié)點執(zhí)行
mkdir?-p?/opt/cni/bin

2.3創(chuàng)建證書相關(guān)文件

#?請查看Github倉庫?或者進行獲取已經(jīng)打好的包
https://github.com/cby-chen/Kubernetes/
https://github.com/cby-chen/Kubernetes/tags
https://github.com/cby-chen/Kubernetes/releases/download/v1.27.3/kubernetes-v1.27.3.tar

3.相關(guān)證書生成

#?master01節(jié)點下載證書生成工具
#?wget?"https://ghproxy.com/https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl_1.6.4_linux_amd64"?-O?/usr/local/bin/cfssl
#?wget?"https://ghproxy.com/https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssljson_1.6.4_linux_amd64"?-O?/usr/local/bin/cfssljson

#?軟件包內(nèi)有
cp?cfssl_*_linux_amd64?/usr/local/bin/cfssl
cp?cfssljson_*_linux_amd64?/usr/local/bin/cfssljson

#?添加執(zhí)行權(quán)限
chmod?+x?/usr/local/bin/cfssl?/usr/local/bin/cfssljson

3.1.生成etcd證書

特別說明除外,以下操作在所有master節(jié)點操作

3.1.1所有master節(jié)點創(chuàng)建證書存放目錄

mkdir?/etc/etcd/ssl?-p

3.1.2master01節(jié)點生成etcd證書

#?寫入生成證書所需的配置文件
cat?>?ca-config.json?<<?EOF?
{
??"signing":?{
????"default":?{
??????"expiry":?"876000h"
????},
????"profiles":?{
??????"kubernetes":?{
????????"usages":?[
????????????"signing",
????????????"key?encipherment",
????????????"server?auth",
????????????"client?auth"
????????],
????????"expiry":?"876000h"
??????}
????}
??}
}
EOF
#?這段配置文件是用于配置加密和認證簽名的一些參數(shù)。
#?
#?在這里,有兩個部分:`signing`和`profiles`。
#?
#?`signing`包含了默認簽名配置和配置文件。
#?默認簽名配置`default`指定了證書的過期時間為`876000h`。`876000h`表示證書有效期為100年。
#?
#?`profiles`部分定義了不同的證書配置文件。
#?在這里,只有一個配置文件`kubernetes`。它包含了以下`usages`和過期時間`expiry`:
#?
#?1.?`signing`:用于對其他證書進行簽名
#?2.?`key?encipherment`:用于加密和解密傳輸數(shù)據(jù)
#?3.?`server?auth`:用于服務(wù)器身份驗證
#?4.?`client?auth`:用于客戶端身份驗證
#?
#?對于`kubernetes`配置文件,證書的過期時間也是`876000h`,即100年。

cat?>?etcd-ca-csr.json??<<?EOF?
{
??"CN":?"etcd",
??"key":?{
????"algo":?"rsa",
????"size":?2048
??},
??"names":?[
????{
??????"C":?"CN",
??????"ST":?"Beijing",
??????"L":?"Beijing",
??????"O":?"etcd",
??????"OU":?"Etcd?Security"
????}
??],
??"ca":?{
????"expiry":?"876000h"
??}
}
EOF
#?這是一個用于生成證書簽名請求(Certificate?Signing?Request,CSR)的JSON配置文件。JSON配置文件指定了生成證書簽名請求所需的數(shù)據(jù)。
#?
#?-?"CN":?"etcd"?指定了希望生成的證書的CN字段(Common?Name),即證書的主題,通常是該證書標識的實體的名稱。
#?-?"key":?{}?指定了生成證書所使用的密鑰的配置信息。"algo":?"rsa"?指定了密鑰的算法為RSA,"size":?2048?指定了密鑰的長度為2048位。
#?-?"names":?[]?包含了生成證書時所需的實體信息。在這個例子中,只包含了一個實體,其相關(guān)信息如下:
#???-?"C":?"CN"?指定了實體的國家/地區(qū)代碼,這里是中國。
#???-?"ST":?"Beijing"?指定了實體所在的省/州。
#???-?"L":?"Beijing"?指定了實體所在的城市。
#???-?"O":?"etcd"?指定了實體的組織名稱。
#???-?"OU":?"Etcd?Security"?指定了實體所屬的組織單位。
#?-?"ca":?{}?指定了生成證書時所需的CA(Certificate?Authority)配置信息。
#???-?"expiry":?"876000h"?指定了證書的有效期,這里是876000小時。
#?
#?生成證書簽名請求時,可以使用這個JSON配置文件作為輸入,根據(jù)配置文件中的信息生成相應(yīng)的CSR文件。然后,可以將CSR文件發(fā)送給CA進行簽名,以獲得有效的證書。

#?生成etcd證書和etcd證書的key(如果你覺得以后可能會擴容,可以在ip那多寫幾個預留出來)
#?若沒有IPv6?可刪除可保留?

cfssl?gencert?-initca?etcd-ca-csr.json?|?cfssljson?-bare?/etc/etcd/ssl/etcd-ca
#?具體的解釋如下:
#?
#?cfssl是一個用于生成TLS/SSL證書的工具,它支持PKI、JSON格式配置文件以及與許多其他集成工具的配合使用。
#?
#?gencert參數(shù)表示生成證書的操作。-initca參數(shù)表示初始化一個CA(證書頒發(fā)機構(gòu))。CA是用于簽發(fā)其他證書的根證書。etcd-ca-csr.json是一個JSON格式的配置文件,其中包含了CA的詳細信息,如私鑰、公鑰、有效期等。這個文件提供了生成CA證書所需的信息。
#?
#?|?符號表示將上一個命令的輸出作為下一個命令的輸入。
#?
#?cfssljson是cfssl工具的一個子命令,用于格式化cfssl生成的JSON數(shù)據(jù)。?-bare參數(shù)表示直接輸出裸證書,即只生成證書文件,不包含其他格式的文件。/etc/etcd/ssl/etcd-ca是指定生成的證書文件的路徑和名稱。
#?
#?所以,這條命令的含義是使用cfssl工具根據(jù)配置文件ca-csr.json生成一個CA證書,并將證書文件保存在/etc/etcd/ssl/etcd-ca路徑下。

cat?>?etcd-csr.json?<<?EOF?
{
??"CN":?"etcd",
??"key":?{
????"algo":?"rsa",
????"size":?2048
??},
??"names":?[
????{
??????"C":?"CN",
??????"ST":?"Beijing",
??????"L":?"Beijing",
??????"O":?"etcd",
??????"OU":?"Etcd?Security"
????}
??]
}
EOF
#?這段代碼是一個JSON格式的配置文件,用于生成一個證書簽名請求(Certificate?Signing?Request,CSR)。
#?
#?首先,"CN"字段指定了該證書的通用名稱(Common?Name),這里設(shè)為"etcd"。
#?
#?接下來,"key"字段指定了密鑰的算法("algo"字段)和長度("size"字段),此處使用的是RSA算法,密鑰長度為2048位。
#?
#?最后,"names"字段是一個數(shù)組,其中包含了一個名字對象,用于指定證書中的一些其他信息。這個名字對象包含了以下字段:
#?-?"C"字段指定了國家代碼(Country),這里設(shè)置為"CN"。
#?-?"ST"字段指定了省份(State)或地區(qū),這里設(shè)置為"Beijing"。
#?-?"L"字段指定了城市(Locality),這里設(shè)置為"Beijing"。
#?-?"O"字段指定了組織(Organization),這里設(shè)置為"etcd"。
#?-?"OU"字段指定了組織單元(Organizational?Unit),這里設(shè)置為"Etcd?Security"。
#?
#?這些字段將作為證書的一部分,用于標識和驗證證書的使用范圍和頒發(fā)者等信息。

cfssl?gencert?\
???-ca=/etc/etcd/ssl/etcd-ca.pem?\
???-ca-key=/etc/etcd/ssl/etcd-ca-key.pem?\
???-config=ca-config.json?\
???-hostname=127.0.0.1,k8s-master01,k8s-master02,k8s-master03,192.168.0.31,192.168.0.32,192.168.0.33,fc00:43f4:1eea:1::10,fc00:43f4:1eea:1::20,fc00:43f4:1eea:1::30,::1?\
???-profile=kubernetes?\
???etcd-csr.json?|?cfssljson?-bare?/etc/etcd/ssl/etcd
#?這是一條使用cfssl生成etcd證書的命令,下面是各個參數(shù)的解釋:
#?
#?-ca=/etc/etcd/ssl/etcd-ca.pem:指定用于簽名etcd證書的CA文件的路徑。
#?-ca-key=/etc/etcd/ssl/etcd-ca-key.pem:指定用于簽名etcd證書的CA私鑰文件的路徑。
#?-config=ca-config.json:指定CA配置文件的路徑,該文件定義了證書的有效期、加密算法等設(shè)置。
#?-hostname=xxxx:指定要為etcd生成證書的主機名和IP地址列表。
#?-profile=kubernetes:指定使用的證書配置文件,該文件定義了證書的用途和擴展屬性。
#?etcd-csr.json:指定etcd證書請求的JSON文件的路徑,該文件包含了證書請求的詳細信息。
#?|?cfssljson?-bare?/etc/etcd/ssl/etcd:通過管道將cfssl命令的輸出傳遞給cfssljson命令,并使用-bare參數(shù)指定輸出文件的前綴路徑,這里將生成etcd證書的.pem和-key.pem文件。
#?
#?這條命令的作用是使用指定的CA證書和私鑰,根據(jù)證書請求的JSON文件和配置文件生成etcd的證書文件。

3.1.3將證書復制到其他節(jié)點

Master='k8s-master02?k8s-master03'
for?NODE?in?$Master;?do?ssh?$NODE?"mkdir?-p?/etc/etcd/ssl";?for?FILE?in?etcd-ca-key.pem??etcd-ca.pem??etcd-key.pem??etcd.pem;?do?scp?/etc/etcd/ssl/${FILE}?$NODE:/etc/etcd/ssl/${FILE};?done;?done

#?這個命令是一個簡單的for循環(huán),在一個由`$Master`存儲的主機列表中迭代執(zhí)行。對于每個主機,它使用`ssh`命令登錄到主機,并在遠程主機上創(chuàng)建一個名為`/etc/etcd/ssl`的目錄(如果不存在)。接下來,它使用`scp`將本地主機上`/etc/etcd/ssl`目錄中的四個文件(`etcd-ca-key.pem`,`etcd-ca.pem`,`etcd-key.pem`和`etcd.pem`)復制到遠程主機的`/etc/etcd/ssl`目錄中。最終的結(jié)果是,遠程主機上的`/etc/etcd/ssl`目錄中包含與本地主機上相同的四個文件的副本。

3.2.生成k8s相關(guān)證書

特別說明除外,以下操作在所有master節(jié)點操作

3.2.1 所有k8s節(jié)點創(chuàng)建證書存放目錄

mkdir?-p?/etc/kubernetes/pki

3.2.2 master01節(jié)點生成k8s證書

#?寫入生成證書所需的配置文件
cat?>?ca-csr.json???<<?EOF?
{
??"CN":?"kubernetes",
??"key":?{
????"algo":?"rsa",
????"size":?2048
??},
??"names":?[
????{
??????"C":?"CN",
??????"ST":?"Beijing",
??????"L":?"Beijing",
??????"O":?"Kubernetes",
??????"OU":?"Kubernetes-manual"
????}
??],
??"ca":?{
????"expiry":?"876000h"
??}
}
EOF
#?這是一個用于生成?Kubernetes?相關(guān)證書的配置文件。該配置文件中包含以下信息:
#?
#?-?CN:CommonName,即用于標識證書的通用名稱。在此配置中,CN?設(shè)置為?"kubernetes",表示該證書是用于?Kubernetes。
#?-?key:用于生成證書的算法和大小。在此配置中,使用的算法是?RSA,大小是?2048?位。
#?-?names:用于證書中的名稱字段的詳細信息。在此配置中,有以下字段信息:
#???-?C:Country,即國家。在此配置中,設(shè)置為?"CN"。
#???-?ST:State,即省/州。在此配置中,設(shè)置為?"Beijing"。
#???-?L:Locality,即城市。在此配置中,設(shè)置為?"Beijing"。
#???-?O:Organization,即組織。在此配置中,設(shè)置為?"Kubernetes"。
#???-?OU:Organization?Unit,即組織單位。在此配置中,設(shè)置為?"Kubernetes-manual"。
#?-?ca:用于證書簽名的證書頒發(fā)機構(gòu)(CA)的配置信息。在此配置中,設(shè)置了證書的有效期為?876000?小時。
#?
#?這個配置文件可以用于生成?Kubernetes?相關(guān)的證書,以確保集群中的通信安全性。

cfssl?gencert?-initca?ca-csr.json?|?cfssljson?-bare?/etc/kubernetes/pki/ca

#?具體的解釋如下:
#?
#?cfssl是一個用于生成TLS/SSL證書的工具,它支持PKI、JSON格式配置文件以及與許多其他集成工具的配合使用。
#?
#?gencert參數(shù)表示生成證書的操作。-initca參數(shù)表示初始化一個CA(證書頒發(fā)機構(gòu))。CA是用于簽發(fā)其他證書的根證書。ca-csr.json是一個JSON格式的配置文件,其中包含了CA的詳細信息,如私鑰、公鑰、有效期等。這個文件提供了生成CA證書所需的信息。
#?
#?|?符號表示將上一個命令的輸出作為下一個命令的輸入。
#?
#?cfssljson是cfssl工具的一個子命令,用于格式化cfssl生成的JSON數(shù)據(jù)。?-bare參數(shù)表示直接輸出裸證書,即只生成證書文件,不包含其他格式的文件。/etc/kubernetes/pki/ca是指定生成的證書文件的路徑和名稱。
#?
#?所以,這條命令的含義是使用cfssl工具根據(jù)配置文件ca-csr.json生成一個CA證書,并將證書文件保存在/etc/kubernetes/pki/ca路徑下。

cat?>?apiserver-csr.json?<<?EOF?
{
??"CN":?"kube-apiserver",
??"key":?{
????"algo":?"rsa",
????"size":?2048
??},
??"names":?[
????{
??????"C":?"CN",
??????"ST":?"Beijing",
??????"L":?"Beijing",
??????"O":?"Kubernetes",
??????"OU":?"Kubernetes-manual"
????}
??]
}
EOF

#?這是一個用于生成?Kubernetes?相關(guān)證書的配置文件。該配置文件中包含以下信息:
#?
#?-?`CN`?字段指定了證書的通用名稱?(Common?Name),這里設(shè)置為?"kube-apiserver",表示該證書用于?Kubernetes?API?Server。
#?-?`key`?字段指定了生成證書時所選用的加密算法和密鑰長度。這里選用了?RSA?算法,密鑰長度為?2048?位。
#?-?`names`?字段包含了一組有關(guān)證書持有者信息的項。這里使用了以下信息:
#???-?`C`?表示國家代碼?(Country),這里設(shè)置為?"CN"?表示中國。
#???-?`ST`?表示州或省份?(State),這里設(shè)置為?"Beijing"?表示北京市。
#???-?`L`?表示城市或地區(qū)?(Location),這里設(shè)置為?"Beijing"?表示北京市。
#???-?`O`?表示組織名稱?(Organization),這里設(shè)置為?"Kubernetes"?表示?Kubernetes。
#???-?`OU`?表示組織單位?(Organizational?Unit),這里設(shè)置為?"Kubernetes-manual"?表示手動管理的?Kubernetes?集群。
#?
#?這個配置文件可以用于生成?Kubernetes?相關(guān)的證書,以確保集群中的通信安全性。


#?生成一個根證書?,多寫了一些IP作為預留IP,為將來添加node做準備
#?10.96.0.1是service網(wǎng)段的第一個地址,需要計算,192.168.0.36為高可用vip地址
#?若沒有IPv6?可刪除可保留?

cfssl?gencert???\
-ca=/etc/kubernetes/pki/ca.pem???\
-ca-key=/etc/kubernetes/pki/ca-key.pem???\
-config=ca-config.json???\
-hostname=10.96.0.1,192.168.0.36,127.0.0.1,kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.default.svc.cluster.local,x.oiox.cn,k.oiox.cn,l.oiox.cn,o.oiox.cn,192.168.0.31,192.168.0.32,192.168.0.33,192.168.0.34,192.168.0.35,192.168.0.36,192.168.0.37,192.168.0.38,192.168.0.39,192.168.1.70,fc00:43f4:1eea:1::10,fc00:43f4:1eea:1::20,fc00:43f4:1eea:1::30,fc00:43f4:1eea:1::40,fc00:43f4:1eea:1::50,fc00:43f4:1eea:1::60,fc00:43f4:1eea:1::70,fc00:43f4:1eea:1::80,fc00:43f4:1eea:1::90,fc00:43f4:1eea:1::100,::1???\
-profile=kubernetes???apiserver-csr.json?|?cfssljson?-bare?/etc/kubernetes/pki/apiserver

#?這個命令是使用cfssl工具生成Kubernetes?API?Server的證書。
#?
#?命令的參數(shù)解釋如下:
#?-?`-ca=/etc/kubernetes/pki/ca.pem`:指定證書的頒發(fā)機構(gòu)(CA)文件路徑。
#?-?`-ca-key=/etc/kubernetes/pki/ca-key.pem`:指定證書的頒發(fā)機構(gòu)(CA)私鑰文件路徑。
#?-?`-config=ca-config.json`:指定證書生成的配置文件路徑,配置文件中包含了證書的有效期、加密算法等信息。
#?-?`-hostname=10.96.0.1,192.168.0.36,127.0.0.1,fc00:43f4:1eea:1::10`:指定證書的主機名或IP地址列表。
#?-?`-profile=kubernetes`:指定證書生成的配置文件中的配置文件名。
#?-?`apiserver-csr.json`:API?Server的證書簽名請求配置文件路徑。
#?-?`|?cfssljson?-bare?/etc/kubernetes/pki/apiserver`:通過管道將生成的證書輸出到cfssljson工具,將其轉(zhuǎn)換為PEM編碼格式,并保存到?`/etc/kubernetes/pki/apiserver.pem`?和?`/etc/kubernetes/pki/apiserver-key.pem`?文件中。
#?
#?最終,這個命令將會生成API?Server的證書和私鑰,并保存到指定的文件中。

3.2.3 生成apiserver聚合證書

cat?>?front-proxy-ca-csr.json??<<?EOF?
{
??"CN":?"kubernetes",
??"key":?{
?????"algo":?"rsa",
?????"size":?2048
??},
??"ca":?{
????"expiry":?"876000h"
??}
}
EOF

#?這個JSON文件表示了生成一個名為"kubernetes"的證書的配置信息。這個證書是用來進行Kubernetes集群的身份驗證和安全通信。
#?
#?配置信息包括以下幾個部分:
#?
#?1.?"CN":?"kubernetes":這表示了證書的通用名稱(Common?Name),也就是證書所代表的實體的名稱。在這里,證書的通用名稱被設(shè)置為"kubernetes",表示這個證書是用來代表Kubernetes集群。
#?
#?2.?"key":這是用來生成證書的密鑰相關(guān)的配置。在這里,配置使用了RSA算法,并且設(shè)置了密鑰的大小為2048位。
#?
#?3.?"ca":這個字段指定了證書的頒發(fā)機構(gòu)(Certificate?Authority)相關(guān)的配置。在這里,配置指定了證書的有效期為876000小時,即100年。這意味著該證書在100年內(nèi)將被視為有效,過期后需要重新生成。
#?
#?總之,這個JSON文件中的配置信息描述了如何生成一個用于Kubernetes集群的證書,包括證書的通用名稱、密鑰算法和大小以及證書的有效期。

cfssl?gencert???-initca?front-proxy-ca-csr.json?|?cfssljson?-bare?/etc/kubernetes/pki/front-proxy-ca?
#?具體的解釋如下:
#?
#?cfssl是一個用于生成TLS/SSL證書的工具,它支持PKI、JSON格式配置文件以及與許多其他集成工具的配合使用。
#?
#?gencert參數(shù)表示生成證書的操作。-initca參數(shù)表示初始化一個CA(證書頒發(fā)機構(gòu))。CA是用于簽發(fā)其他證書的根證書。front-proxy-ca-csr.json是一個JSON格式的配置文件,其中包含了CA的詳細信息,如私鑰、公鑰、有效期等。這個文件提供了生成CA證書所需的信息。
#?
#?|?符號表示將上一個命令的輸出作為下一個命令的輸入。
#?
#?cfssljson是cfssl工具的一個子命令,用于格式化cfssl生成的JSON數(shù)據(jù)。?-bare參數(shù)表示直接輸出裸證書,即只生成證書文件,不包含其他格式的文件。/etc/kubernetes/pki/front-proxy-ca是指定生成的證書文件的路徑和名稱。
#?
#?所以,這條命令的含義是使用cfssl工具根據(jù)配置文件ca-csr.json生成一個CA證書,并將證書文件保存在/etc/kubernetes/pki/front-proxy-ca路徑下。

cat?>?front-proxy-client-csr.json??<<?EOF?
{
??"CN":?"front-proxy-client",
??"key":?{
?????"algo":?"rsa",
?????"size":?2048
??}
}
EOF

#?這是一個JSON格式的配置文件,用于描述一個名為"front-proxy-client"的配置。配置包括兩個字段:CN和key。
#?
#?-?CN(Common?Name)字段表示證書的通用名稱,這里為"front-proxy-client"。
#?-?key字段描述了密鑰的算法和大小。"algo"表示使用RSA算法,"size"表示密鑰大小為2048位。
#?
#?該配置文件用于生成一個SSL證書,用于在前端代理客戶端進行認證和數(shù)據(jù)傳輸?shù)募用堋_@個證書中的通用名稱是"front-proxy-client",使用RSA算法生成,密鑰大小為2048位。

cfssl?gencert??\
-ca=/etc/kubernetes/pki/front-proxy-ca.pem???\
-ca-key=/etc/kubernetes/pki/front-proxy-ca-key.pem???\
-config=ca-config.json???\
-profile=kubernetes???front-proxy-client-csr.json?|?cfssljson?-bare?/etc/kubernetes/pki/front-proxy-client

#?這個命令使用cfssl工具生成一個用于Kubernetes的front-proxy-client證書。
#?
#?主要參數(shù)解釋如下:
#?-?`-ca=/etc/kubernetes/pki/front-proxy-ca.pem`:?指定用于簽署證書的根證書文件路徑。
#?-?`-ca-key=/etc/kubernetes/pki/front-proxy-ca-key.pem`:?指定用于簽署證書的根證書的私鑰文件路徑。
#?-?`-config=ca-config.json`:?指定用于配置證書簽署的配置文件路徑。該配置文件描述了證書生成的一些規(guī)則,如加密算法和有效期等。
#?-?`-profile=kubernetes`:?指定生成證書時使用的配置文件中定義的profile,其中包含了一些默認的參數(shù)。
#?-?`front-proxy-client-csr.json`:?指定用于生成證書的CSR文件路徑,該文件包含了證書請求的相關(guān)信息。
#?-?`|?cfssljson?-bare?/etc/kubernetes/pki/front-proxy-client`:?通過管道將生成的證書輸出到cfssljson工具進行解析,并通過`-bare`參數(shù)將證書和私鑰分別保存到指定路徑。
#?
#?這個命令的作用是根據(jù)提供的CSR文件和配置信息,使用指定的根證書和私鑰生成一個前端代理客戶端的證書,并將證書和私鑰分別保存到`/etc/kubernetes/pki/front-proxy-client.pem`和`/etc/kubernetes/pki/front-proxy-client-key.pem`文件中。

3.2.4 生成controller-manage的證書

在《5.高可用配置》選擇使用那種高可用方案
若使用 haproxy、keepalived 那么為 --server=https://192.168.0.36:9443
若使用 nginx方案,那么為 --server=https://127.0.0.1:8443

cat?>?manager-csr.json?<<?EOF?
{
??"CN":?"system:kube-controller-manager",
??"key":?{
????"algo":?"rsa",
????"size":?2048
??},
??"names":?[
????{
??????"C":?"CN",
??????"ST":?"Beijing",
??????"L":?"Beijing",
??????"O":?"system:kube-controller-manager",
??????"OU":?"Kubernetes-manual"
????}
??]
}
EOF
#?這是一個用于生成密鑰對(公鑰和私鑰)的JSON配置文件。下面是針對該文件中每個字段的詳細解釋:
#?
#?-?"CN":?值為"system:kube-controller-manager",代表通用名稱(Common?Name),是此密鑰對的主題(subject)。
#?-?"key":?這個字段用來定義密鑰算法和大小。
#???-?"algo":?值為"rsa",表示使用RSA算法。
#???-?"size":?值為2048,表示生成的密鑰大小為2048位。
#?-?"names":?這個字段用來定義密鑰對的各個名稱字段。
#???-?"C":?值為"CN",表示國家(Country)名稱是"CN"(中國)。
#???-?"ST":?值為"Beijing",表示省/州(State/Province)名稱是"Beijing"(北京)。
#???-?"L":?值為"Beijing",表示城市(Locality)名稱是"Beijing"(北京)。
#???-?"O":?值為"system:kube-controller-manager",表示組織(Organization)名稱是"system:kube-controller-manager"。
#???-?"OU":?值為"Kubernetes-manual",表示組織單位(Organizational?Unit)名稱是"Kubernetes-manual"。
#?
#?這個JSON配置文件基本上是告訴生成密鑰對的工具,生成一個帶有特定名稱和屬性的密鑰對。


cfssl?gencert?\
???-ca=/etc/kubernetes/pki/ca.pem?\
???-ca-key=/etc/kubernetes/pki/ca-key.pem?\
???-config=ca-config.json?\
???-profile=kubernetes?\
???manager-csr.json?|?cfssljson?-bare?/etc/kubernetes/pki/controller-manager
#?這是一個命令行操作,使用cfssl工具生成證書。
#?
#?1.?`cfssl?gencert`?是cfssl工具的命令,用于生成證書。
#?2.?`-ca`?指定根證書的路徑和文件名,這里是`/etc/kubernetes/pki/ca.pem`。
#?3.?`-ca-key`?指定根證書的私鑰的路徑和文件名,這里是`/etc/kubernetes/pki/ca-key.pem`。
#?4.?`-config`?指定配置文件的路徑和文件名,這里是`ca-config.json`。
#?5.?`-profile`?指定證書使用的配置文件中的配置模板,這里是`kubernetes`。
#?6.?`manager-csr.json`?是證書簽發(fā)請求的配置文件,用于生成證書簽發(fā)請求。
#?7.?`|`?管道操作符,將前一條命令的輸出作為后一條命令的輸入。
#?8.?`cfssljson?-bare`?是?cfssl?工具的命令,作用是將證書簽發(fā)請求的輸出轉(zhuǎn)換為PKCS#1、PKCS#8和x509?PEM文件。
#?9.?`/etc/kubernetes/pki/controller-manager`?是轉(zhuǎn)換后的?PEM?文件的存儲位置和文件名。
#?
#?這個命令的作用是根據(jù)根證書和私鑰、配置文件以及證書簽發(fā)請求的配置文件,生成經(jīng)過簽發(fā)的控制器管理器證書和私鑰,并將轉(zhuǎn)換后的?PEM?文件保存到指定的位置。


#?設(shè)置一個集群項
#?在《5.高可用配置》選擇使用那種高可用方案
#?若使用?haproxy、keepalived?那么為?`--server=https://192.168.0.36:8443`
#?若使用?nginx方案,那么為?`--server=https://127.0.0.1:8443`
kubectl?config?set-cluster?kubernetes?\
?????--certificate-authority=/etc/kubernetes/pki/ca.pem?\
?????--embed-certs=true?\
?????--server=https://127.0.0.1:8443?\
?????--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig
#?kubectl?config?set-cluster命令用于配置集群信息。
#?--certificate-authority選項指定了集群的證書頒發(fā)機構(gòu)(CA)的路徑,這個CA會驗證kube-apiserver提供的證書是否合法。
#?--embed-certs選項用于將證書嵌入到生成的kubeconfig文件中,這樣就不需要在kubeconfig文件中單獨指定證書文件路徑。
#?--server選項指定了kube-apiserver的地址,這里使用的是127.0.0.1:8443,表示使用本地主機上的kube-apiserver,默認端口為8443。
#?--kubeconfig選項指定了生成的kubeconfig文件的路徑和名稱,這里指定為/etc/kubernetes/controller-manager.kubeconfig。
#?綜上所述,kubectl?config?set-cluster命令的作用是在kubeconfig文件中設(shè)置集群信息,包括證書頒發(fā)機構(gòu)、證書、kube-apiserver地址等。


#?設(shè)置一個環(huán)境項,一個上下文
kubectl?config?set-context?system:kube-controller-manager@kubernetes?\
????--cluster=kubernetes?\
????--user=system:kube-controller-manager?\
????--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig
#?這個命令用于配置?Kubernetes?控制器管理器的上下文信息。下面是各個參數(shù)的詳細解釋:
#?1.?`kubectl?config?set-context?system:kube-controller-manager@kubernetes`:?設(shè)置上下文的名稱為?`system:kube-controller-manager@kubernetes`,這是一個標識符,用于唯一標識該上下文。
#?2.?`--cluster=kubernetes`:?指定集群的名稱為?`kubernetes`,這是一個現(xiàn)有集群的標識符,表示要管理的?Kubernetes?集群。
#?3.?`--user=system:kube-controller-manager`:?指定使用的用戶身份為?`system:kube-controller-manager`。這是一個特殊的用戶身份,具有控制?Kubernetes?控制器管理器的權(quán)限。
#?4.?`--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig`:?指定?kubeconfig?文件的路徑為?`/etc/kubernetes/controller-manager.kubeconfig`。kubeconfig?文件是一個用于管理?Kubernetes?配置的文件,包含了集群、用戶和上下文的相關(guān)信息。
#?通過運行這個命令,可以將這些配置信息保存到?`/etc/kubernetes/controller-manager.kubeconfig`?文件中,以便在后續(xù)的操作中使用。



#?設(shè)置一個用戶項
kubectl?config?set-credentials?system:kube-controller-manager?\
?????--client-certificate=/etc/kubernetes/pki/controller-manager.pem?\
?????--client-key=/etc/kubernetes/pki/controller-manager-key.pem?\
?????--embed-certs=true?\
?????--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig
#?上述命令是用于設(shè)置?Kubernetes?的?controller-manager?組件的客戶端憑據(jù)。下面是每個參數(shù)的詳細解釋:
#?
#?-?`kubectl?config`:?是使用?kubectl?命令行工具的配置子命令。
#?-?`set-credentials`:?是定義一個新的用戶憑據(jù)配置的子命令。
#?-?`system:kube-controller-manager`:?是設(shè)置用戶憑據(jù)的名稱,`system:`?是?Kubernetes?API?Server?內(nèi)置的身份驗證器使用的用戶標識符前綴,它表示是一個系統(tǒng)用戶,在本例中是?kube-controller-manager?組件使用的身份。
#?-?`--client-certificate=/etc/kubernetes/pki/controller-manager.pem`:?指定?controller-manager.pem?客戶端證書的路徑。
#?-?`--client-key=/etc/kubernetes/pki/controller-manager-key.pem`:?指定?controller-manager-key.pem?客戶端私鑰的路徑。
#?-?`--embed-certs=true`:?表示將證書和私鑰直接嵌入到生成的?kubeconfig?文件中,而不是通過引用外部文件。
#?-?`--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig`:?指定生成的?kubeconfig?文件的路徑和文件名,即?controller-manager.kubeconfig。
#?
#?通過運行上述命令,將根據(jù)提供的證書和私鑰信息,為?kube-controller-manager?創(chuàng)建一個?kubeconfig?文件,以便后續(xù)使用該文件進行身份驗證和訪問?Kubernetes?API。


#?設(shè)置默認環(huán)境
kubectl?config?use-context?system:kube-controller-manager@kubernetes?\
?????--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig
#?這個命令是用來指定kubectl使用指定的上下文環(huán)境來執(zhí)行操作。上下文環(huán)境是kubectl用來確定要連接到哪個Kubernetes集群以及使用哪個身份驗證信息的配置。
#?
#?在這個命令中,`kubectl?config?use-context`是用來設(shè)置當前上下文環(huán)境的命令。?`system:kube-controller-manager@kubernetes`是指定的上下文名稱,它告訴kubectl要使用的Kubernetes集群和身份驗證信息。?
#?`--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig`是用來指定使用的kubeconfig文件的路徑。kubeconfig文件是存儲集群連接和身份驗證信息的配置文件。
#?通過執(zhí)行這個命令,kubectl將使用指定的上下文來執(zhí)行后續(xù)的操作,包括部署和管理Kubernetes資源。

3.2.5 生成kube-scheduler的證書

cat?>?scheduler-csr.json?<<?EOF?
{
??"CN":?"system:kube-scheduler",
??"key":?{
????"algo":?"rsa",
????"size":?2048
??},
??"names":?[
????{
??????"C":?"CN",
??????"ST":?"Beijing",
??????"L":?"Beijing",
??????"O":?"system:kube-scheduler",
??????"OU":?"Kubernetes-manual"
????}
??]
}
EOF
#?這個命令是用來創(chuàng)建一個叫做scheduler-csr.json的文件,并將其中的內(nèi)容賦值給該文件。
#?
#?文件內(nèi)容是一個JSON格式的文本,包含了一個描述證書請求的結(jié)構(gòu)。
#?
#?具體內(nèi)容如下:
#?
#?-?"CN":?"system:kube-scheduler":Common?Name字段,表示該證書的名稱為system:kube-scheduler。
#?-?"key":?{"algo":?"rsa",?"size":?2048}:key字段指定生成證書時使用的加密算法是RSA,并且密鑰的長度為2048位。
#?-?"names":?[...]:names字段定義了證書中的另外一些標識信息。
#?-?"C":?"CN":Country字段,表示國家/地區(qū)為中國。
#?-?"ST":?"Beijing":State字段,表示省/市為北京。
#?-?"L":?"Beijing":Locality字段,表示所在城市為北京。
#?-?"O":?"system:kube-scheduler":Organization字段,表示組織為system:kube-scheduler。
#?-?"OU":?"Kubernetes-manual":Organizational?Unit字段,表示組織單元為Kubernetes-manual。
#?
#?而EOF是一個占位符,用于標記開始和結(jié)束的位置。在開始的EOF之后到結(jié)束的EOF之間的內(nèi)容將會被寫入到scheduler-csr.json文件中。
#?
#?總體來說,這個命令用于生成一個描述kube-scheduler證書請求的JSON文件。

cfssl?gencert?\
???-ca=/etc/kubernetes/pki/ca.pem?\
???-ca-key=/etc/kubernetes/pki/ca-key.pem?\
???-config=ca-config.json?\
???-profile=kubernetes?\
???scheduler-csr.json?|?cfssljson?-bare?/etc/kubernetes/pki/scheduler
#?上述命令是使用cfssl工具生成Kubernetes?Scheduler的證書。
#?
#?具體解釋如下:
#?
#?1.?`cfssl?gencert`:使用cfssl工具生成證書。
#?2.?`-ca=/etc/kubernetes/pki/ca.pem`:指定根證書文件的路徑。在這里,是指定根證書的路徑為`/etc/kubernetes/pki/ca.pem`。
#?3.?`-ca-key=/etc/kubernetes/pki/ca-key.pem`:指定根證書私鑰文件的路徑。在這里,是指定根證書私鑰的路徑為`/etc/kubernetes/pki/ca-key.pem`。
#?4.?`-config=ca-config.json`:指定證書配置文件的路徑。在這里,是指定證書配置文件的路徑為`ca-config.json`。
#?5.?`-profile=kubernetes`:指定證書的配置文件中的一個配置文件模板。在這里,是指定配置文件中的`kubernetes`配置模板。
#?6.?`scheduler-csr.json`:指定Scheduler的證書簽名請求文件(CSR)的路徑。在這里,是指定請求文件的路徑為`scheduler-csr.json`。
#?7.?`|`(管道符號):將前一個命令的輸出作為下一個命令的輸入。
#?8.?`cfssljson`:將cfssl工具生成的證書簽名請求(CSR)進行解析。
#?9.?`-bare?/etc/kubernetes/pki/scheduler`:指定輸出路徑和前綴。在這里,是將解析的證書簽名請求生成以下文件:`/etc/kubernetes/pki/scheduler.pem`(包含了證書)、`/etc/kubernetes/pki/scheduler-key.pem`(包含了私鑰)。
#?
#?總結(jié)來說,這個命令的目的是根據(jù)根證書、根證書私鑰、證書配置文件、CSR文件等生成Kubernetes?Scheduler的證書和私鑰文件。



#?在《5.高可用配置》選擇使用那種高可用方案
#?若使用?haproxy、keepalived?那么為?`--server=https://192.168.0.36:8443`
#?若使用?nginx方案,那么為?`--server=https://127.0.0.1:8443`

kubectl?config?set-cluster?kubernetes?\
?????--certificate-authority=/etc/kubernetes/pki/ca.pem?\
?????--embed-certs=true?\
?????--server=https://127.0.0.1:8443?\
?????--kubeconfig=/etc/kubernetes/scheduler.kubeconfig
#?該命令用于配置一個名為"kubernetes"的集群,并將其應(yīng)用到/etc/kubernetes/scheduler.kubeconfig文件中。
#?
#?該命令的解釋如下:
#?-?`kubectl?config?set-cluster?kubernetes`:?設(shè)置一個集群并命名為"kubernetes"。
#?-?`--certificate-authority=/etc/kubernetes/pki/ca.pem`:?指定集群使用的證書授權(quán)機構(gòu)的路徑。
#?-?`--embed-certs=true`:?該標志指示將證書嵌入到生成的kubeconfig文件中。
#?-?`--server=https://127.0.0.1:8443`:?指定集群的?API?server?位置。
#?-?`--kubeconfig=/etc/kubernetes/scheduler.kubeconfig`:?指定要保存?kubeconfig?文件的路徑和名稱。

kubectl?config?set-credentials?system:kube-scheduler?\
?????--client-certificate=/etc/kubernetes/pki/scheduler.pem?\
?????--client-key=/etc/kubernetes/pki/scheduler-key.pem?\
?????--embed-certs=true?\
?????--kubeconfig=/etc/kubernetes/scheduler.kubeconfig
#?這段命令是用于設(shè)置?kube-scheduler?組件的身份驗證憑據(jù),并生成相應(yīng)的?kubeconfig?文件。
#?
#?解釋每個選項的含義如下:
#?-?`kubectl?config?set-credentials?system:kube-scheduler`:設(shè)置?`system:kube-scheduler`?用戶的身份驗證憑據(jù)。
#?-?`--client-certificate=/etc/kubernetes/pki/scheduler.pem`:指定一個客戶端證書文件,用于基于證書的身份驗證。在這種情況下,指定了?kube-scheduler?組件的證書文件路徑。
#?-?`--client-key=/etc/kubernetes/pki/scheduler-key.pem`:指定與客戶端證書相對應(yīng)的客戶端私鑰文件。
#?-?`--embed-certs=true`:將客戶端證書和私鑰嵌入到生成的?kubeconfig?文件中。
#?-?`--kubeconfig=/etc/kubernetes/scheduler.kubeconfig`:指定生成的?kubeconfig?文件的路徑和名稱。
#?
#?該命令的目的是為?kube-scheduler?組件生成一個?kubeconfig?文件,以便進行身份驗證和訪問集群資源。kubeconfig?文件是一個包含了連接到?Kubernetes?集群所需的所有配置信息的文件,包括服務(wù)器地址、證書和秘鑰等。

kubectl?config?set-context?system:kube-scheduler@kubernetes?\
?????--cluster=kubernetes?\
?????--user=system:kube-scheduler?\
?????--kubeconfig=/etc/kubernetes/scheduler.kubeconfig
#?該命令用于設(shè)置一個名為"system:kube-scheduler@kubernetes"的上下文,具體配置如下:
#?
#?1.?--cluster=kubernetes:?指定集群的名稱為"kubernetes",這個集群是在當前的kubeconfig文件中已經(jīng)定義好的。
#?2.?--user=system:kube-scheduler:?指定用戶的名稱為"system:kube-scheduler",這個用戶也是在當前的kubeconfig文件中已經(jīng)定義好的。這個用戶用于認證和授權(quán)kube-scheduler組件訪問Kubernetes集群的權(quán)限。
#?3.?--kubeconfig=/etc/kubernetes/scheduler.kubeconfig:?指定kubeconfig文件的路徑為"/etc/kubernetes/scheduler.kubeconfig",這個文件將被用來保存上下文的配置信息。
#?
#?這個命令的作用是將上述的配置信息保存到指定的kubeconfig文件中,以便后續(xù)使用該文件進行認證和授權(quán)訪問Kubernetes集群。

kubectl?config?use-context?system:kube-scheduler@kubernetes?\
?????--kubeconfig=/etc/kubernetes/scheduler.kubeconfig
#?上述命令是使用`kubectl`命令來配置Kubernetes集群中的調(diào)度器組件。
#?
#?`kubectl?config?use-context`命令用于切換`kubectl`當前使用的上下文。上下文是Kubernetes集群、用戶和命名空間的組合,用于確定`kubectl`的連接目標。下面解釋這個命令的不同部分:
#?
#?-?`system:kube-scheduler@kubernetes`是一個上下文名稱。它指定了使用`kube-scheduler`用戶和`kubernetes`命名空間的系統(tǒng)級別上下文。系統(tǒng)級別上下文用于操作Kubernetes核心組件。
#?
#?-?`--kubeconfig=/etc/kubernetes/scheduler.kubeconfig`用于指定Kubernetes配置文件的路徑。Kubernetes配置文件包含連接到Kubernetes集群所需的身份驗證和連接信息。
#?
#?通過運行以上命令,`kubectl`將使用指定的上下文和配置文件,以便在以后的命令中能正確地與Kubernetes集群中的調(diào)度器組件進行交互。

3.2.6 生成admin的證書配置

cat?>?admin-csr.json?<<?EOF?
{
??"CN":?"admin",
??"key":?{
????"algo":?"rsa",
????"size":?2048
??},
??"names":?[
????{
??????"C":?"CN",
??????"ST":?"Beijing",
??????"L":?"Beijing",
??????"O":?"system:masters",
??????"OU":?"Kubernetes-manual"
????}
??]
}
EOF
#?這段代碼是一個JSON格式的配置文件,用于創(chuàng)建和配置一個名為"admin"的Kubernetes憑證。
#?
#?這個憑證包含以下字段:
#?
#?-?"CN":?"admin":?這是憑證的通用名稱,表示這是一個管理員憑證。
#?-?"key":?這是一個包含證書密鑰相關(guān)信息的對象。
#???-?"algo":?"rsa":這是使用的加密算法類型,這里是RSA加密算法。
#???-?"size":?2048:這是密鑰的大小,這里是2048位。
#?-?"names":?這是一個包含證書名稱信息的數(shù)組。
#???-?"C":?"CN":這是證書的國家/地區(qū)字段,這里是中國。
#???-?"ST":?"Beijing":這是證書的省/州字段,這里是北京。
#???-?"L":?"Beijing":這是證書的城市字段,這里是北京。
#???-?"O":?"system:masters":這是證書的組織字段,這里是system:masters,表示系統(tǒng)的管理員組。
#???-?"OU":?"Kubernetes-manual":這是證書的部門字段,這里是Kubernetes-manual。
#?
#?通過這個配置文件創(chuàng)建的憑證將具有管理員權(quán)限,并且可以用于管理Kubernetes集群。

cfssl?gencert?\
???-ca=/etc/kubernetes/pki/ca.pem?\
???-ca-key=/etc/kubernetes/pki/ca-key.pem?\
???-config=ca-config.json?\
???-profile=kubernetes?\
???admin-csr.json?|?cfssljson?-bare?/etc/kubernetes/pki/admin
#?上述命令是使用cfssl工具生成Kubernetes?admin的證書。
#?
#?具體解釋如下:
#?
#?1.?`cfssl?gencert`:使用cfssl工具生成證書。
#?2.?`-ca=/etc/kubernetes/pki/ca.pem`:指定根證書文件的路徑。在這里,是指定根證書的路徑為`/etc/kubernetes/pki/ca.pem`。
#?3.?`-ca-key=/etc/kubernetes/pki/ca-key.pem`:指定根證書私鑰文件的路徑。在這里,是指定根證書私鑰的路徑為`/etc/kubernetes/pki/ca-key.pem`。
#?4.?`-config=ca-config.json`:指定證書配置文件的路徑。在這里,是指定證書配置文件的路徑為`ca-config.json`。
#?5.?`-profile=kubernetes`:指定證書的配置文件中的一個配置文件模板。在這里,是指定配置文件中的`kubernetes`配置模板。
#?6.?`admin-csr.json`:指定admin的證書簽名請求文件(CSR)的路徑。在這里,是指定請求文件的路徑為`admin-csr.json`。
#?7.?`|`(管道符號):將前一個命令的輸出作為下一個命令的輸入。
#?8.?`cfssljson`:將cfssl工具生成的證書簽名請求(CSR)進行解析。
#?9.?`-bare?/etc/kubernetes/pki/admin`:指定輸出路徑和前綴。在這里,是將解析的證書簽名請求生成以下文件:`/etc/kubernetes/pki/admin.pem`(包含了證書)、`/etc/kubernetes/pki/admin-key.pem`(包含了私鑰)。
#?
#?總結(jié)來說,這個命令的目的是根據(jù)根證書、根證書私鑰、證書配置文件、CSR文件等生成Kubernetes?Scheduler的證書和私鑰文件。

#?在《5.高可用配置》選擇使用那種高可用方案
#?若使用?haproxy、keepalived?那么為?`--server=https://192.168.0.36:8443`
#?若使用?nginx方案,那么為?`--server=https://127.0.0.1:8443`

kubectl?config?set-cluster?kubernetes?????\
??--certificate-authority=/etc/kubernetes/pki/ca.pem?????\
??--embed-certs=true?????\
??--server=https://127.0.0.1:8443?????\
??--kubeconfig=/etc/kubernetes/admin.kubeconfig
#?該命令用于配置一個名為"kubernetes"的集群,并將其應(yīng)用到/etc/kubernetes/scheduler.kubeconfig文件中。
#?
#?該命令的解釋如下:
#?-?`kubectl?config?set-cluster?kubernetes`:?設(shè)置一個集群并命名為"kubernetes"。
#?-?`--certificate-authority=/etc/kubernetes/pki/ca.pem`:?指定集群使用的證書授權(quán)機構(gòu)的路徑。
#?-?`--embed-certs=true`:?該標志指示將證書嵌入到生成的kubeconfig文件中。
#?-?`--server=https://127.0.0.1:8443`:?指定集群的?API?server?位置。
#?-?`--kubeconfig=/etc/kubernetes/admin.kubeconfig`:?指定要保存?kubeconfig?文件的路徑和名稱。

kubectl?config?set-credentials?kubernetes-admin??\
??--client-certificate=/etc/kubernetes/pki/admin.pem?????\
??--client-key=/etc/kubernetes/pki/admin-key.pem?????\
??--embed-certs=true?????\
??--kubeconfig=/etc/kubernetes/admin.kubeconfig
#?這段命令是用于設(shè)置?kubernetes-admin?組件的身份驗證憑據(jù),并生成相應(yīng)的?kubeconfig?文件。
#?
#?解釋每個選項的含義如下:
#?-?`kubectl?config?set-credentials?kubernetes-admin`:設(shè)置?`kubernetes-admin`?用戶的身份驗證憑據(jù)。
#?-?`--client-certificate=/etc/kubernetes/pki/admin.pem`:指定一個客戶端證書文件,用于基于證書的身份驗證。在這種情況下,指定了?admin?組件的證書文件路徑。
#?-?`--client-key=/etc/kubernetes/pki/admin-key.pem`:指定與客戶端證書相對應(yīng)的客戶端私鑰文件。
#?-?`--embed-certs=true`:將客戶端證書和私鑰嵌入到生成的?kubeconfig?文件中。
#?-?`--kubeconfig=/etc/kubernetes/admin.kubeconfig`:指定生成的?kubeconfig?文件的路徑和名稱。
#?
#?該命令的目的是為?admin?組件生成一個?kubeconfig?文件,以便進行身份驗證和訪問集群資源。kubeconfig?文件是一個包含了連接到?Kubernetes?集群所需的所有配置信息的文件,包括服務(wù)器地址、證書和秘鑰等。


kubectl?config?set-context?kubernetes-admin@kubernetes????\
??--cluster=kubernetes?????\
??--user=kubernetes-admin?????\
??--kubeconfig=/etc/kubernetes/admin.kubeconfig
#?該命令用于設(shè)置一個名為"kubernetes-admin@kubernetes"的上下文,具體配置如下:
#?
#?1.?--cluster=kubernetes:?指定集群的名稱為"kubernetes",這個集群是在當前的kubeconfig文件中已經(jīng)定義好的。
#?2.?--user=kubernetes-admin:?指定用戶的名稱為"kubernetes-admin",這個用戶也是在當前的kubeconfig文件中已經(jīng)定義好的。這個用戶用于認證和授權(quán)admin組件訪問Kubernetes集群的權(quán)限。
#?3.?--kubeconfig=/etc/kubernetes/admin.kubeconfig:?指定kubeconfig文件的路徑為"/etc/kubernetes/admin.kubeconfig",這個文件將被用來保存上下文的配置信息。
#?
#?這個命令的作用是將上述的配置信息保存到指定的kubeconfig文件中,以便后續(xù)使用該文件進行認證和授權(quán)訪問Kubernetes集群。


kubectl?config?use-context?kubernetes-admin@kubernetes??--kubeconfig=/etc/kubernetes/admin.kubeconfig
#?上述命令是使用`kubectl`命令來配置Kubernetes集群中的調(diào)度器組件。
#?
#?`kubectl?config?use-context`命令用于切換`kubectl`當前使用的上下文。上下文是Kubernetes集群、用戶和命名空間的組合,用于確定`kubectl`的連接目標。下面解釋這個命令的不同部分:
#?
#?-?`kubernetes-admin@kubernetes`是一個上下文名稱。它指定了使用`kubernetes-admin`用戶和`kubernetes`命名空間的系統(tǒng)級別上下文。系統(tǒng)級別上下文用于操作Kubernetes核心組件。
#?
#?-?`--kubeconfig=/etc/kubernetes/admin.kubeconfig`用于指定Kubernetes配置文件的路徑。Kubernetes配置文件包含連接到Kubernetes集群所需的身份驗證和連接信息。
#?
#?通過運行以上命令,`kubectl`將使用指定的上下文和配置文件,以便在以后的命令中能正確地與Kubernetes集群中的調(diào)度器組件進行交互。

3.2.7 創(chuàng)建kube-proxy證書

在《5.高可用配置》選擇使用那種高可用方案
若使用 haproxy、keepalived 那么為 --server=https://192.168.0.36:8443
若使用 nginx方案,那么為 --server=https://127.0.0.1:8443

cat?>?kube-proxy-csr.json??<<?EOF?
{
??"CN":?"system:kube-proxy",
??"key":?{
????"algo":?"rsa",
????"size":?2048
??},
??"names":?[
????{
??????"C":?"CN",
??????"ST":?"Beijing",
??????"L":?"Beijing",
??????"O":?"system:kube-proxy",
??????"OU":?"Kubernetes-manual"
????}
??]
}
EOF
#?這段代碼是一個JSON格式的配置文件,用于創(chuàng)建和配置一個名為"kube-proxy-csr"的Kubernetes憑證。
#?
#?這個憑證包含以下字段:
#?
#?-?"CN":?"system:kube-proxy":?這是憑證的通用名稱,表示這是一個管理員憑證。
#?-?"key":?這是一個包含證書密鑰相關(guān)信息的對象。
#???-?"algo":?"rsa":這是使用的加密算法類型,這里是RSA加密算法。
#???-?"size":?2048:這是密鑰的大小,這里是2048位。
#?-?"names":?這是一個包含證書名稱信息的數(shù)組。
#???-?"C":?"CN":這是證書的國家/地區(qū)字段,這里是中國。
#???-?"ST":?"Beijing":這是證書的省/州字段,這里是北京。
#???-?"L":?"Beijing":這是證書的城市字段,這里是北京。
#???-?"O":?"system:kube-proxy":這是證書的組織字段,這里是system:kube-proxy。
#???-?"OU":?"Kubernetes-manual":這是證書的部門字段,這里是Kubernetes-manual。
#?
#?通過這個配置文件創(chuàng)建的憑證將具有管理員權(quán)限,并且可以用于管理Kubernetes集群。

cfssl?gencert?\
???-ca=/etc/kubernetes/pki/ca.pem?\
???-ca-key=/etc/kubernetes/pki/ca-key.pem?\
???-config=ca-config.json?\
???-profile=kubernetes?\
???kube-proxy-csr.json?|?cfssljson?-bare?/etc/kubernetes/pki/kube-proxy
#?上述命令是使用cfssl工具生成Kubernetes?admin的證書。
#?
#?具體解釋如下:
#?
#?1.?`cfssl?gencert`:使用cfssl工具生成證書。
#?2.?`-ca=/etc/kubernetes/pki/ca.pem`:指定根證書文件的路徑。在這里,是指定根證書的路徑為`/etc/kubernetes/pki/ca.pem`。
#?3.?`-ca-key=/etc/kubernetes/pki/ca-key.pem`:指定根證書私鑰文件的路徑。在這里,是指定根證書私鑰的路徑為`/etc/kubernetes/pki/ca-key.pem`。
#?4.?`-config=ca-config.json`:指定證書配置文件的路徑。在這里,是指定證書配置文件的路徑為`ca-config.json`。
#?5.?`-profile=kubernetes`:指定證書的配置文件中的一個配置文件模板。在這里,是指定配置文件中的`kubernetes`配置模板。
#?6.?`kube-proxy-csr.json`:指定admin的證書簽名請求文件(CSR)的路徑。在這里,是指定請求文件的路徑為`kube-proxy-csr.json`。
#?7.?`|`(管道符號):將前一個命令的輸出作為下一個命令的輸入。
#?8.?`cfssljson`:將cfssl工具生成的證書簽名請求(CSR)進行解析。
#?9.?`-bare?/etc/kubernetes/pki/kube-proxy`:指定輸出路徑和前綴。在這里,是將解析的證書簽名請求生成以下文件:`/etc/kubernetes/pki/kube-proxy.pem`(包含了證書)、`/etc/kubernetes/pki/kube-proxy-key.pem`(包含了私鑰)。
#?
#?總結(jié)來說,這個命令的目的是根據(jù)根證書、根證書私鑰、證書配置文件、CSR文件等生成Kubernetes?Scheduler的證書和私鑰文件。


#?在《5.高可用配置》選擇使用那種高可用方案
#?若使用?haproxy、keepalived?那么為?`--server=https://192.168.0.36:8443`
#?若使用?nginx方案,那么為?`--server=https://127.0.0.1:8443`

kubectl?config?set-cluster?kubernetes?????\
??--certificate-authority=/etc/kubernetes/pki/ca.pem?????\
??--embed-certs=true?????\
??--server=https://127.0.0.1:8443?????\
??--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig
#?該命令用于配置一個名為"kubernetes"的集群,并將其應(yīng)用到/etc/kubernetes/kube-proxy.kubeconfig文件中。
#?
#?該命令的解釋如下:
#?-?`kubectl?config?set-cluster?kubernetes`:?設(shè)置一個集群并命名為"kubernetes"。
#?-?`--certificate-authority=/etc/kubernetes/pki/ca.pem`:?指定集群使用的證書授權(quán)機構(gòu)的路徑。
#?-?`--embed-certs=true`:?該標志指示將證書嵌入到生成的kubeconfig文件中。
#?-?`--server=https://127.0.0.1:8443`:?指定集群的?API?server?位置。
#?-?`--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig`:?指定要保存?kubeconfig?文件的路徑和名稱。

kubectl?config?set-credentials?kube-proxy??\
??--client-certificate=/etc/kubernetes/pki/kube-proxy.pem?????\
??--client-key=/etc/kubernetes/pki/kube-proxy-key.pem?????\
??--embed-certs=true?????\
??--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig
#?這段命令是用于設(shè)置?kube-proxy?組件的身份驗證憑據(jù),并生成相應(yīng)的?kubeconfig?文件。
#?
#?解釋每個選項的含義如下:
#?-?`kubectl?config?set-credentials?kube-proxy`:設(shè)置?`kube-proxy`?用戶的身份驗證憑據(jù)。
#?-?`--client-certificate=/etc/kubernetes/pki/kube-proxy.pem`:指定一個客戶端證書文件,用于基于證書的身份驗證。在這種情況下,指定了?kube-proxy?組件的證書文件路徑。
#?-?`--client-key=/etc/kubernetes/pki/kube-proxy-key.pem`:指定與客戶端證書相對應(yīng)的客戶端私鑰文件。
#?-?`--embed-certs=true`:將客戶端證書和私鑰嵌入到生成的?kubeconfig?文件中。
#?-?`--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig`:指定生成的?kubeconfig?文件的路徑和名稱。
#?
#?該命令的目的是為?kube-proxy?組件生成一個?kubeconfig?文件,以便進行身份驗證和訪問集群資源。kubeconfig?文件是一個包含了連接到?Kubernetes?集群所需的所有配置信息的文件,包括服務(wù)器地址、證書和秘鑰等。

kubectl?config?set-context?kube-proxy@kubernetes????\
??--cluster=kubernetes?????\
??--user=kube-proxy?????\
??--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig
#?該命令用于設(shè)置一個名為"kube-proxy@kubernetes"的上下文,具體配置如下:
#?
#?1.?--cluster=kubernetes:?指定集群的名稱為"kubernetes",這個集群是在當前的kubeconfig文件中已經(jīng)定義好的。
#?2.?--user=kube-proxy:?指定用戶的名稱為"kube-proxy",這個用戶也是在當前的kubeconfig文件中已經(jīng)定義好的。這個用戶用于認證和授權(quán)kube-proxy組件訪問Kubernetes集群的權(quán)限。
#?3.?--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig:?指定kubeconfig文件的路徑為"/etc/kubernetes/kube-proxy.kubeconfig",這個文件將被用來保存上下文的配置信息。
#?
#?這個命令的作用是將上述的配置信息保存到指定的kubeconfig文件中,以便后續(xù)使用該文件進行認證和授權(quán)訪問Kubernetes集群。

kubectl?config?use-context?kube-proxy@kubernetes??--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig
#?上述命令是使用`kubectl`命令來配置Kubernetes集群中的調(diào)度器組件。
#?
#?`kubectl?config?use-context`命令用于切換`kubectl`當前使用的上下文。上下文是Kubernetes集群、用戶和命名空間的組合,用于確定`kubectl`的連接目標。下面解釋這個命令的不同部分:
#?
#?-?`kube-proxy@kubernetes`是一個上下文名稱。它指定了使用`kube-proxy`用戶和`kubernetes`命名空間的系統(tǒng)級別上下文。系統(tǒng)級別上下文用于操作Kubernetes核心組件。
#?
#?-?`--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig`用于指定Kubernetes配置文件的路徑。Kubernetes配置文件包含連接到Kubernetes集群所需的身份驗證和連接信息。
#?
#?通過運行以上命令,`kubectl`將使用指定的上下文和配置文件,以便在以后的命令中能正確地與Kubernetes集群中的調(diào)度器組件進行交互。

3.2.8 創(chuàng)建ServiceAccount Key ——secret

openssl?genrsa?-out?/etc/kubernetes/pki/sa.key?2048
openssl?rsa?-in?/etc/kubernetes/pki/sa.key?-pubout?-out?/etc/kubernetes/pki/sa.pub

#?這兩個命令是使用OpenSSL工具生成RSA密鑰對。
#?
#?命令1:openssl?genrsa?-out?/etc/kubernetes/pki/sa.key?2048
#?該命令用于生成私鑰文件。具體解釋如下:
#?-?openssl:openssl命令行工具。
#?-?genrsa:生成RSA密鑰對。
#?-?-out?/etc/kubernetes/pki/sa.key:指定輸出私鑰文件的路徑和文件名。
#?-?2048:指定密鑰長度為2048位。
#?
#?命令2:openssl?rsa?-in?/etc/kubernetes/pki/sa.key?-pubout?-out?/etc/kubernetes/pki/sa.pub
#?該命令用于從私鑰中導出公鑰。具體解釋如下:
#?-?openssl:openssl命令行工具。
#?-?rsa:與私鑰相關(guān)的RSA操作。
#?-?-in?/etc/kubernetes/pki/sa.key:指定輸入私鑰文件的路徑和文件名。
#?-?-pubout:指定輸出公鑰。
#?-?-out?/etc/kubernetes/pki/sa.pub:指定輸出公鑰文件的路徑和文件名。
#?
#?總結(jié):通過以上兩個命令,我們可以使用OpenSSL工具生成一個RSA密鑰對,并將私鑰保存在/etc/kubernetes/pki/sa.key文件中,將公鑰保存在/etc/kubernetes/pki/sa.pub文件中。

3.2.9 將證書發(fā)送到其他master節(jié)點

#其他節(jié)點創(chuàng)建目錄
#?mkdir??/etc/kubernetes/pki/?-p

for?NODE?in?k8s-master02?k8s-master03;?do??for?FILE?in?$(ls?/etc/kubernetes/pki?|?grep?-v?etcd);?do??scp?/etc/kubernetes/pki/${FILE}?$NODE:/etc/kubernetes/pki/${FILE};?done;??for?FILE?in?admin.kubeconfig?controller-manager.kubeconfig?scheduler.kubeconfig;?do??scp?/etc/kubernetes/${FILE}?$NODE:/etc/kubernetes/${FILE};?done;?done

3.2.10 查看證書

ls?/etc/kubernetes/pki/
admin.csr??????????controller-manager.csr??????kube-proxy.csr
admin-key.pem??????controller-manager-key.pem??kube-proxy-key.pem
admin.pem??????????controller-manager.pem??????kube-proxy.pem
apiserver.csr??????front-proxy-ca.csr??????????sa.key
apiserver-key.pem??front-proxy-ca-key.pem??????sa.pub
apiserver.pem??????front-proxy-ca.pem??????????scheduler.csr
ca.csr?????????????front-proxy-client.csr??????scheduler-key.pem
ca-key.pem?????????front-proxy-client-key.pem??scheduler.pem
ca.pem?????????????front-proxy-client.pem

#?一共26個就對了
ls?/etc/kubernetes/pki/?|wc?-l
26

4.k8s系統(tǒng)組件配置

4.1.etcd配置

這個配置文件是用于?etcd?集群的配置,其中包含了一些重要的參數(shù)和選項:

-?`name`:指定了當前節(jié)點的名稱,用于集群中區(qū)分不同的節(jié)點。
-?`data-dir`:指定了?etcd?數(shù)據(jù)的存儲目錄。
-?`wal-dir`:指定了?etcd?數(shù)據(jù)寫入磁盤的目錄。
-?`snapshot-count`:指定了觸發(fā)快照的事務(wù)數(shù)量。
-?`heartbeat-interval`:指定了?etcd?集群中節(jié)點之間的心跳間隔。
-?`election-timeout`:指定了選舉超時時間。
-?`quota-backend-bytes`:指定了存儲的限額,0?表示無限制。
-?`listen-peer-urls`:指定了節(jié)點之間通信的?URL,使用?HTTPS?協(xié)議。
-?`listen-client-urls`:指定了客戶端訪問?etcd?集群的?URL,同時提供了本地訪問的?URL。
-?`max-snapshots`:指定了快照保留的數(shù)量。
-?`max-wals`:指定了日志保留的數(shù)量。
-?`initial-advertise-peer-urls`:指定了節(jié)點之間通信的初始?URL。
-?`advertise-client-urls`:指定了客戶端訪問?etcd?集群的初始?URL。
-?`discovery`:定義了?etcd?集群發(fā)現(xiàn)相關(guān)的選項。
-?`initial-cluster`:指定了?etcd?集群的初始成員。
-?`initial-cluster-token`:指定了集群的?token。
-?`initial-cluster-state`:指定了集群的初始狀態(tài)。
-?`strict-reconfig-check`:指定了嚴格的重新配置檢查選項。
-?`enable-v2`:啟用了?v2?API。
-?`enable-pprof`:啟用了性能分析。
-?`proxy`:設(shè)置了代理模式。
-?`client-transport-security`:客戶端的傳輸安全配置。
-?`peer-transport-security`:節(jié)點之間的傳輸安全配置。
-?`debug`:是否啟用調(diào)試模式。
-?`log-package-levels`:日志的輸出級別。
-?`log-outputs`:指定了日志的輸出類型。
-?`force-new-cluster`:是否強制創(chuàng)建一個新的集群。

這些參數(shù)和選項可以根據(jù)實際需求進行調(diào)整和配置。

4.1.1master01配置

#?如果要用IPv6那么把IPv4地址修改為IPv6即可
cat?>?/etc/etcd/etcd.config.yml?<<?EOF?
name:?'k8s-master01'
data-dir:?/var/lib/etcd
wal-dir:?/var/lib/etcd/wal
snapshot-count:?5000
heartbeat-interval:?100
election-timeout:?1000
quota-backend-bytes:?0
listen-peer-urls:?'https://192.168.0.31:2380'
listen-client-urls:?'https://192.168.0.31:2379,http://127.0.0.1:2379'
max-snapshots:?3
max-wals:?5
cors:
initial-advertise-peer-urls:?'https://192.168.0.31:2380'
advertise-client-urls:?'https://192.168.0.31:2379'
discovery:
discovery-fallback:?'proxy'
discovery-proxy:
discovery-srv:
initial-cluster:?'k8s-master01=https://192.168.0.31:2380,k8s-master02=https://192.168.0.32:2380,k8s-master03=https://192.168.0.33:2380'
initial-cluster-token:?'etcd-k8s-cluster'
initial-cluster-state:?'new'
strict-reconfig-check:?false
enable-v2:?true
enable-pprof:?true
proxy:?'off'
proxy-failure-wait:?5000
proxy-refresh-interval:?30000
proxy-dial-timeout:?1000
proxy-write-timeout:?5000
proxy-read-timeout:?0
client-transport-security:
??cert-file:?'/etc/kubernetes/pki/etcd/etcd.pem'
??key-file:?'/etc/kubernetes/pki/etcd/etcd-key.pem'
??client-cert-auth:?true
??trusted-ca-file:?'/etc/kubernetes/pki/etcd/etcd-ca.pem'
??auto-tls:?true
peer-transport-security:
??cert-file:?'/etc/kubernetes/pki/etcd/etcd.pem'
??key-file:?'/etc/kubernetes/pki/etcd/etcd-key.pem'
??peer-client-cert-auth:?true
??trusted-ca-file:?'/etc/kubernetes/pki/etcd/etcd-ca.pem'
??auto-tls:?true
debug:?false
log-package-levels:
log-outputs:?[default]
force-new-cluster:?false
EOF

4.1.2master02配置

#?如果要用IPv6那么把IPv4地址修改為IPv6即可
cat?>?/etc/etcd/etcd.config.yml?<<?EOF?
name:?'k8s-master02'
data-dir:?/var/lib/etcd
wal-dir:?/var/lib/etcd/wal
snapshot-count:?5000
heartbeat-interval:?100
election-timeout:?1000
quota-backend-bytes:?0
listen-peer-urls:?'https://192.168.0.32:2380'
listen-client-urls:?'https://192.168.0.32:2379,http://127.0.0.1:2379'
max-snapshots:?3
max-wals:?5
cors:
initial-advertise-peer-urls:?'https://192.168.0.32:2380'
advertise-client-urls:?'https://192.168.0.32:2379'
discovery:
discovery-fallback:?'proxy'
discovery-proxy:
discovery-srv:
initial-cluster:?'k8s-master01=https://192.168.0.31:2380,k8s-master02=https://192.168.0.32:2380,k8s-master03=https://192.168.0.33:2380'
initial-cluster-token:?'etcd-k8s-cluster'
initial-cluster-state:?'new'
strict-reconfig-check:?false
enable-v2:?true
enable-pprof:?true
proxy:?'off'
proxy-failure-wait:?5000
proxy-refresh-interval:?30000
proxy-dial-timeout:?1000
proxy-write-timeout:?5000
proxy-read-timeout:?0
client-transport-security:
??cert-file:?'/etc/kubernetes/pki/etcd/etcd.pem'
??key-file:?'/etc/kubernetes/pki/etcd/etcd-key.pem'
??client-cert-auth:?true
??trusted-ca-file:?'/etc/kubernetes/pki/etcd/etcd-ca.pem'
??auto-tls:?true
peer-transport-security:
??cert-file:?'/etc/kubernetes/pki/etcd/etcd.pem'
??key-file:?'/etc/kubernetes/pki/etcd/etcd-key.pem'
??peer-client-cert-auth:?true
??trusted-ca-file:?'/etc/kubernetes/pki/etcd/etcd-ca.pem'
??auto-tls:?true
debug:?false
log-package-levels:
log-outputs:?[default]
force-new-cluster:?false
EOF

4.1.3master03配置

#?如果要用IPv6那么把IPv4地址修改為IPv6即可
cat?>?/etc/etcd/etcd.config.yml?<<?EOF?
name:?'k8s-master03'
data-dir:?/var/lib/etcd
wal-dir:?/var/lib/etcd/wal
snapshot-count:?5000
heartbeat-interval:?100
election-timeout:?1000
quota-backend-bytes:?0
listen-peer-urls:?'https://192.168.0.33:2380'
listen-client-urls:?'https://192.168.0.33:2379,http://127.0.0.1:2379'
max-snapshots:?3
max-wals:?5
cors:
initial-advertise-peer-urls:?'https://192.168.0.33:2380'
advertise-client-urls:?'https://192.168.0.33:2379'
discovery:
discovery-fallback:?'proxy'
discovery-proxy:
discovery-srv:
initial-cluster:?'k8s-master01=https://192.168.0.31:2380,k8s-master02=https://192.168.0.32:2380,k8s-master03=https://192.168.0.33:2380'
initial-cluster-token:?'etcd-k8s-cluster'
initial-cluster-state:?'new'
strict-reconfig-check:?false
enable-v2:?true
enable-pprof:?true
proxy:?'off'
proxy-failure-wait:?5000
proxy-refresh-interval:?30000
proxy-dial-timeout:?1000
proxy-write-timeout:?5000
proxy-read-timeout:?0
client-transport-security:
??cert-file:?'/etc/kubernetes/pki/etcd/etcd.pem'
??key-file:?'/etc/kubernetes/pki/etcd/etcd-key.pem'
??client-cert-auth:?true
??trusted-ca-file:?'/etc/kubernetes/pki/etcd/etcd-ca.pem'
??auto-tls:?true
peer-transport-security:
??cert-file:?'/etc/kubernetes/pki/etcd/etcd.pem'
??key-file:?'/etc/kubernetes/pki/etcd/etcd-key.pem'
??peer-client-cert-auth:?true
??trusted-ca-file:?'/etc/kubernetes/pki/etcd/etcd-ca.pem'
??auto-tls:?true
debug:?false
log-package-levels:
log-outputs:?[default]
force-new-cluster:?false
EOF

4.2.創(chuàng)建service(所有master節(jié)點操作)

4.2.1創(chuàng)建etcd.service并啟動

cat?>?/usr/lib/systemd/system/etcd.service?<<?EOF

[Unit]
Description=Etcd?Service
Documentation=https://coreos.com/etcd/docs/latest/
After=network.target

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd?--config-file=/etc/etcd/etcd.config.yml
Restart=on-failure
RestartSec=10
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
Alias=etcd3.service

EOF

4.2.2創(chuàng)建etcd證書目錄

mkdir?/etc/kubernetes/pki/etcd
ln?-s?/etc/etcd/ssl/*?/etc/kubernetes/pki/etcd/

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?etcd.service
#?啟用并立即啟動etcd.service單元。etcd.service是etcd守護進程的systemd服務(wù)單元。

systemctl?restart?etcd.service
#?重啟etcd.service單元,即重新啟動etcd守護進程。

systemctl?status?etcd.service
#?etcd.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

4.2.3查看etcd狀態(tài)

#?如果要用IPv6那么把IPv4地址修改為IPv6即可
export?ETCDCTL_API=3
etcdctl?--endpoints="192.168.0.33:2379,192.168.0.32:2379,192.168.0.31:2379"?--cacert=/etc/kubernetes/pki/etcd/etcd-ca.pem?--cert=/etc/kubernetes/pki/etcd/etcd.pem?--key=/etc/kubernetes/pki/etcd/etcd-key.pem??endpoint?status?--write-out=table
+-------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|?????ENDPOINT??????|????????ID????????|?VERSION?|?DB?SIZE?|?IS?LEADER?|?IS?LEARNER?|?RAFT?TERM?|?RAFT?INDEX?|?RAFT?APPLIED?INDEX?|?ERRORS?|
+-------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|?192.168.0.33:2379?|?6ae2196f75cd6d95?|???3.5.9?|???20?kB?|?????false?|??????false?|?????????2?|??????????9?|??????????????????9?|????????|
|?192.168.0.32:2379?|?46cbf93f7713a252?|???3.5.9?|???20?kB?|?????false?|??????false?|?????????2?|??????????9?|??????????????????9?|????????|
|?192.168.0.31:2379?|?ec6051ffc7487dd7?|???3.5.9?|???20?kB?|??????true?|??????false?|?????????2?|??????????9?|??????????????????9?|????????|
+-------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+




etcdctl?--endpoints="192.168.0.33:2379,192.168.0.32:2379,192.168.0.31:2379"?--cacert=/etc/kubernetes/pki/etcd/etcd-ca.pem?--cert=/etc/kubernetes/pki/etcd/etcd.pem?--key=/etc/kubernetes/pki/etcd/etcd-key.pem??cluster-health

5.高可用配置(在Master服務(wù)器上操作)

注意* 5.1.1 和5.1.2 二選一即可

選擇使用那種高可用方案,同時可以倆種都選用,實現(xiàn)內(nèi)外兼顧的效果,比如:
5.1 的 NGINX方案實現(xiàn)集群內(nèi)的高可用
5.2 的 haproxy、keepalived 方案實現(xiàn)集群外訪問

在《3.2.生成k8s相關(guān)證書》

若使用 nginx方案,那么為 --server=https://127.0.0.1:8443
若使用 haproxy、keepalived 那么為 --server=https://192.168.0.36:9443

5.1 NGINX高可用方案

5.1.1 進行編譯

#?安裝編譯環(huán)境
yum?install?gcc?-y

#?下載解壓nginx二進制文件
#?wget?http://nginx.org/download/nginx-1.25.1.tar.gz
tar?xvf?nginx-*.tar.gz
cd?nginx-*

#?進行編譯
./configure?--with-stream?--without-http?--without-http_uwsgi_module?--without-http_scgi_module?--without-http_fastcgi_module
make?&&?make?install?

#?拷貝編譯好的nginx
node='k8s-master02?k8s-master03?k8s-node01?k8s-node02'
for?NODE?in?$node;?do?scp?-r?/usr/local/nginx/?$NODE:/usr/local/nginx/;?done

5.1.2 寫入啟動配置

在所有主機上執(zhí)行

#?寫入nginx配置文件
cat?>?/usr/local/nginx/conf/kube-nginx.conf?<<EOF
worker_processes?1;
events?{
????worker_connections??1024;
}
stream?{
????upstream?backend?{
????????least_conn;
????????hash?$remote_addr?consistent;
????????server?192.168.0.31:6443????????max_fails=3?fail_timeout=30s;
????????server?192.168.0.32:6443????????max_fails=3?fail_timeout=30s;
????????server?192.168.0.33:6443????????max_fails=3?fail_timeout=30s;
????}
????server?{
????????listen?127.0.0.1:8443;
????????proxy_connect_timeout?1s;
????????proxy_pass?backend;
????}
}
EOF



#?寫入啟動配置文件
cat?>?/etc/systemd/system/kube-nginx.service?<<EOF
[Unit]
Description=kube-apiserver?nginx?proxy
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx?-c?/usr/local/nginx/conf/kube-nginx.conf?-p?/usr/local/nginx?-t
ExecStart=/usr/local/nginx/sbin/nginx?-c?/usr/local/nginx/conf/kube-nginx.conf?-p?/usr/local/nginx
ExecReload=/usr/local/nginx/sbin/nginx?-c?/usr/local/nginx/conf/kube-nginx.conf?-p?/usr/local/nginx?-s?reload
PrivateTmp=true
Restart=always
RestartSec=5
StartLimitInterval=0
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF
#?這是一個用于kube-apiserver的NGINX代理的systemd單位文件。
#?
#?[Unit]部分包含了單位的描述和依賴關(guān)系。它指定了在network.target和network-online.target之后啟動,并且需要network-online.target。
#?
#?[Service]部分定義了如何運行該服務(wù)。Type指定了服務(wù)進程的類型(forking表示主進程會派生一個子進程)。ExecStartPre指定了在服務(wù)啟動之前需要運行的命令,用于檢查NGINX配置文件的語法是否正確。ExecStart指定了啟動服務(wù)所需的命令。ExecReload指定了在重新加載配置文件時運行的命令。PrivateTmp設(shè)置為true表示將為服務(wù)創(chuàng)建一個私有的臨時文件系統(tǒng)。Restart和RestartSec用于設(shè)置服務(wù)的自動重啟機制。StartLimitInterval設(shè)置為0表示無需等待,可以立即重啟服務(wù)。LimitNOFILE指定了服務(wù)的文件描述符的限制。
#?
#?[Install]部分指定了在哪些target下該單位應(yīng)該被啟用。
#?
#?綜上所述,此單位文件用于啟動和管理kube-apiserver的NGINX代理服務(wù)。它通過NGINX來反向代理和負載均衡kube-apiserver的請求。該服務(wù)會在系統(tǒng)啟動時自動啟動,并具有自動重啟的機制。


#?設(shè)置開機自啟

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。
systemctl?enable?--now?kube-nginx.service
#?啟用并立即啟動kube-nginx.service單元。kube-nginx.service是kube-nginx守護進程的systemd服務(wù)單元。
systemctl?restart?kube-nginx.service
#?重啟kube-nginx.service單元,即重新啟動kube-nginx守護進程。
systemctl?status?kube-nginx.service
#?kube-nginx.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

5.2 keepalived和haproxy 高可用方案

5.2.1安裝keepalived和haproxy服務(wù)

systemctl?disable?--now?firewalld
setenforce?0
sed?-i?'s#SELINUX=enforcing#SELINUX=disabled#g'?/etc/selinux/config
yum?-y?install?keepalived?haproxy

5.2.2修改haproxy配置文件(配置文件一樣)

#?cp?/etc/haproxy/haproxy.cfg?/etc/haproxy/haproxy.cfg.bak

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?k8s-master
?bind?0.0.0.0:9443
?bind?127.0.0.1:9443
?mode?tcp
?option?tcplog
?tcp-request?inspect-delay?5s
?default_backend?k8s-master


backend?k8s-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??k8s-master01??192.168.0.31:6443?check
?server??k8s-master02??192.168.0.32:6443?check
?server??k8s-master03??192.168.0.33:6443?check
EOF

5.2.3Master01配置keepalived master節(jié)點

#cp?/etc/keepalived/keepalived.conf?/etc/keepalived/keepalived.conf.bak

cat?>?/etc/keepalived/keepalived.conf?<<?EOF
!?Configuration?File?for?keepalived

global_defs?{
????router_id?LVS_DEVEL
}
vrrp_script?chk_apiserver?{
????script?"/etc/keepalived/check_apiserver.sh"
????interval?5?
????weight?-5
????fall?2
????rise?1
}
vrrp_instance?VI_1?{
????state?MASTER
????#?注意網(wǎng)卡名
????interface?eth0?
????mcast_src_ip?192.168.0.31
????virtual_router_id?51
????priority?100
????nopreempt
????advert_int?2
????authentication?{
????????auth_type?PASS
????????auth_pass?K8SHA_KA_AUTH
????}
????virtual_ipaddress?{
????????192.168.0.36
????}
????track_script?{
??????chk_apiserver?
}?}

EOF

5.2.4Master02配置keepalived backup節(jié)點

#?cp?/etc/keepalived/keepalived.conf?/etc/keepalived/keepalived.conf.bak

cat?>?/etc/keepalived/keepalived.conf?<<?EOF
!?Configuration?File?for?keepalived

global_defs?{
????router_id?LVS_DEVEL
}
vrrp_script?chk_apiserver?{
????script?"/etc/keepalived/check_apiserver.sh"
????interval?5?
????weight?-5
????fall?2
????rise?1

}
vrrp_instance?VI_1?{
????state?BACKUP
????#?注意網(wǎng)卡名
????interface?eth0
????mcast_src_ip?192.168.0.32
????virtual_router_id?51
????priority?80
????nopreempt
????advert_int?2
????authentication?{
????????auth_type?PASS
????????auth_pass?K8SHA_KA_AUTH
????}
????virtual_ipaddress?{
????????192.168.0.36
????}
????track_script?{
??????chk_apiserver?
}?}

EOF

5.2.5Master03配置keepalived backup節(jié)點

#?cp?/etc/keepalived/keepalived.conf?/etc/keepalived/keepalived.conf.bak

cat?>?/etc/keepalived/keepalived.conf?<<?EOF
!?Configuration?File?for?keepalived

global_defs?{
????router_id?LVS_DEVEL
}
vrrp_script?chk_apiserver?{
????script?"/etc/keepalived/check_apiserver.sh"
????interval?5?
????weight?-5
????fall?2
????rise?1

}
vrrp_instance?VI_1?{
????state?BACKUP
????#?注意網(wǎng)卡名
????interface?eth0
????mcast_src_ip?192.168.0.33
????virtual_router_id?51
????priority?50
????nopreempt
????advert_int?2
????authentication?{
????????auth_type?PASS
????????auth_pass?K8SHA_KA_AUTH
????}
????virtual_ipaddress?{
????????192.168.0.36
????}
????track_script?{
??????chk_apiserver?
}?}

EOF

5.2.6健康檢查腳本配置(lb主機)

cat?>??/etc/keepalived/check_apiserver.sh?<<?EOF
#!/bin/bash

err=0
for?k?in?\$(seq?1?3)
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

#?給腳本授權(quán)

chmod?+x?/etc/keepalived/check_apiserver.sh

5.2.7啟動服務(wù)

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。
systemctl?enable?--now?haproxy.service
#?啟用并立即啟動haproxy.service單元。haproxy.service是haproxy守護進程的systemd服務(wù)單元。
systemctl?enable?--now?keepalived.service
#?啟用并立即啟動keepalived.service單元。keepalived.service是keepalived守護進程的systemd服務(wù)單元。
systemctl?status?haproxy.service
#?haproxy.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。
systemctl?status?keepalived.service
#?keepalived.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

5.2.8測試高可用

#?能ping同

[root@k8s-node02?~]#?ping?192.168.0.36

#?能telnet訪問

[root@k8s-node02?~]#?telnet?192.168.0.36?9443

#?關(guān)閉主節(jié)點,看vip是否漂移到備節(jié)點

6.k8s組件配置

所有k8s節(jié)點創(chuàng)建以下目錄

mkdir?-p?/etc/kubernetes/manifests/?/etc/systemd/system/kubelet.service.d?/var/lib/kubelet?/var/log/kubernetes

6.1.創(chuàng)建apiserver(所有master節(jié)點)

6.1.1master01節(jié)點配置

cat?>?/usr/lib/systemd/system/kube-apiserver.service?<<?EOF

[Unit]
Description=Kubernetes?API?Server
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
ExecStart=/usr/local/bin/kube-apiserver?\\
??????--v=2??\\
??????--allow-privileged=true??\\
??????--bind-address=0.0.0.0??\\
??????--secure-port=6443??\\
??????--advertise-address=192.168.0.31?\\
??????--service-cluster-ip-range=10.96.0.0/12,fd00:1111::/112??\\
??????--service-node-port-range=30000-32767??\\
??????--etcd-servers=https://192.168.0.31:2379,https://192.168.0.32:2379,https://192.168.0.33:2379?\\
??????--etcd-cafile=/etc/etcd/ssl/etcd-ca.pem??\\
??????--etcd-certfile=/etc/etcd/ssl/etcd.pem??\\
??????--etcd-keyfile=/etc/etcd/ssl/etcd-key.pem??\\
??????--client-ca-file=/etc/kubernetes/pki/ca.pem??\\
??????--tls-cert-file=/etc/kubernetes/pki/apiserver.pem??\\
??????--tls-private-key-file=/etc/kubernetes/pki/apiserver-key.pem??\\
??????--kubelet-client-certificate=/etc/kubernetes/pki/apiserver.pem??\\
??????--kubelet-client-key=/etc/kubernetes/pki/apiserver-key.pem??\\
??????--service-account-key-file=/etc/kubernetes/pki/sa.pub??\\
??????--service-account-signing-key-file=/etc/kubernetes/pki/sa.key??\\
??????--service-account-issuer=https://kubernetes.default.svc.cluster.local?\\
??????--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname??\\
??????--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota??\
??????--authorization-mode=Node,RBAC??\\
??????--enable-bootstrap-token-auth=true??\\
??????--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem??\\
??????--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.pem??\\
??????--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client-key.pem??\\
??????--requestheader-allowed-names=aggregator??\\
??????--requestheader-group-headers=X-Remote-Group??\\
??????--requestheader-extra-headers-prefix=X-Remote-Extra-??\\
??????--requestheader-username-headers=X-Remote-User?\\
??????--enable-aggregator-routing=true
Restart=on-failure
RestartSec=10s
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

EOF

6.1.2master02節(jié)點配置

cat?>?/usr/lib/systemd/system/kube-apiserver.service?<<?EOF
[Unit]
Description=Kubernetes?API?Server
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
ExecStart=/usr/local/bin/kube-apiserver?\\
??????--v=2??\\
??????--allow-privileged=true??\\
??????--bind-address=0.0.0.0??\\
??????--secure-port=6443??\\
??????--advertise-address=192.168.0.32?\\
??????--service-cluster-ip-range=10.96.0.0/12,fd00:1111::/112??\\
??????--service-node-port-range=30000-32767??\\
??????--etcd-servers=https://192.168.0.31:2379,https://192.168.0.32:2379,https://192.168.0.33:2379?\\
??????--etcd-cafile=/etc/etcd/ssl/etcd-ca.pem??\\
??????--etcd-certfile=/etc/etcd/ssl/etcd.pem??\\
??????--etcd-keyfile=/etc/etcd/ssl/etcd-key.pem??\\
??????--client-ca-file=/etc/kubernetes/pki/ca.pem??\\
??????--tls-cert-file=/etc/kubernetes/pki/apiserver.pem??\\
??????--tls-private-key-file=/etc/kubernetes/pki/apiserver-key.pem??\\
??????--kubelet-client-certificate=/etc/kubernetes/pki/apiserver.pem??\\
??????--kubelet-client-key=/etc/kubernetes/pki/apiserver-key.pem??\\
??????--service-account-key-file=/etc/kubernetes/pki/sa.pub??\\
??????--service-account-signing-key-file=/etc/kubernetes/pki/sa.key??\\
??????--service-account-issuer=https://kubernetes.default.svc.cluster.local?\\
??????--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname??\\
??????--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota??\\
??????--authorization-mode=Node,RBAC??\\
??????--enable-bootstrap-token-auth=true??\\
??????--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem??\\
??????--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.pem??\\
??????--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client-key.pem??\\
??????--requestheader-allowed-names=aggregator??\\
??????--requestheader-group-headers=X-Remote-Group??\\
??????--requestheader-extra-headers-prefix=X-Remote-Extra-??\\
??????--requestheader-username-headers=X-Remote-User?\\
??????--enable-aggregator-routing=true

Restart=on-failure
RestartSec=10s
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

EOF

6.1.3master03節(jié)點配置

cat?>?/usr/lib/systemd/system/kube-apiserver.service??<<?EOF

[Unit]
Description=Kubernetes?API?Server
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
ExecStart=/usr/local/bin/kube-apiserver?\\
??????--v=2??\\
??????--allow-privileged=true??\\
??????--bind-address=0.0.0.0??\\
??????--secure-port=6443??\\
??????--advertise-address=192.168.0.33?\\
??????--service-cluster-ip-range=10.96.0.0/12,fd00:1111::/112??\\
??????--service-node-port-range=30000-32767??\\
??????--etcd-servers=https://192.168.0.31:2379,https://192.168.0.32:2379,https://192.168.0.33:2379?\\
??????--etcd-cafile=/etc/etcd/ssl/etcd-ca.pem??\\
??????--etcd-certfile=/etc/etcd/ssl/etcd.pem??\\
??????--etcd-keyfile=/etc/etcd/ssl/etcd-key.pem??\\
??????--client-ca-file=/etc/kubernetes/pki/ca.pem??\\
??????--tls-cert-file=/etc/kubernetes/pki/apiserver.pem??\\
??????--tls-private-key-file=/etc/kubernetes/pki/apiserver-key.pem??\\
??????--kubelet-client-certificate=/etc/kubernetes/pki/apiserver.pem??\\
??????--kubelet-client-key=/etc/kubernetes/pki/apiserver-key.pem??\\
??????--service-account-key-file=/etc/kubernetes/pki/sa.pub??\\
??????--service-account-signing-key-file=/etc/kubernetes/pki/sa.key??\\
??????--service-account-issuer=https://kubernetes.default.svc.cluster.local?\\
??????--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname??\\
??????--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota??\\
??????--authorization-mode=Node,RBAC??\\
??????--enable-bootstrap-token-auth=true??\\
??????--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem??\\
??????--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.pem??\\
??????--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client-key.pem??\\
??????--requestheader-allowed-names=aggregator??\\
??????--requestheader-group-headers=X-Remote-Group??\\
??????--requestheader-extra-headers-prefix=X-Remote-Extra-??\\
??????--requestheader-username-headers=X-Remote-User?\\
??????--enable-aggregator-routing=true

Restart=on-failure
RestartSec=10s
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

EOF

6.1.4啟動apiserver(所有master節(jié)點)

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?kube-apiserver.service
#?啟用并立即啟動kube-apiserver.service單元。kube-apiserver.service是kube-apiserver守護進程的systemd服務(wù)單元。

systemctl?restart?kube-apiserver.service
#?重啟kube-apiserver.service單元,即重新啟動etcd守護進程。

systemctl?status?kube-apiserver.service
#?kube-apiserver.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

6.2.配置kube-controller-manager service

#?所有master節(jié)點配置,且配置相同
#?172.16.0.0/12為pod網(wǎng)段,按需求設(shè)置你自己的網(wǎng)段

cat?>?/usr/lib/systemd/system/kube-controller-manager.service?<<?EOF

[Unit]
Description=Kubernetes?Controller?Manager
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
ExecStart=/usr/local/bin/kube-controller-manager?\\
??????--v=2?\\
??????--bind-address=0.0.0.0?\\
??????--root-ca-file=/etc/kubernetes/pki/ca.pem?\\
??????--cluster-signing-cert-file=/etc/kubernetes/pki/ca.pem?\\
??????--cluster-signing-key-file=/etc/kubernetes/pki/ca-key.pem?\\
??????--service-account-private-key-file=/etc/kubernetes/pki/sa.key?\\
??????--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig?\\
??????--leader-elect=true?\\
??????--use-service-account-credentials=true?\\
??????--node-monitor-grace-period=40s?\\
??????--node-monitor-period=5s?\\
??????--controllers=*,bootstrapsigner,tokencleaner?\\
??????--allocate-node-cidrs=true?\\
??????--service-cluster-ip-range=10.96.0.0/12,fd00:1111::/112?\\
??????--cluster-cidr=172.16.0.0/12,fc00:2222::/112?\\
??????--node-cidr-mask-size-ipv4=24?\\
??????--node-cidr-mask-size-ipv6=120?\\
??????--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem

Restart=always
RestartSec=10s

[Install]
WantedBy=multi-user.target

EOF

6.2.1啟動kube-controller-manager,并查看狀態(tài)

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?kube-controller-manager.service
#?啟用并立即啟動kube-controller-manager.service單元。kube-controller-manager.service是kube-controller-manager守護進程的systemd服務(wù)單元。

systemctl?restart?kube-controller-manager.service
#?重啟kube-controller-manager.service單元,即重新啟動etcd守護進程。

systemctl?status?kube-controller-manager.service
#?kube-controller-manager.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

6.3.配置kube-scheduler service

6.3.1所有master節(jié)點配置,且配置相同

cat?>?/usr/lib/systemd/system/kube-scheduler.service?<<?EOF

[Unit]
Description=Kubernetes?Scheduler
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
ExecStart=/usr/local/bin/kube-scheduler?\\
??????--v=2?\\
??????--bind-address=0.0.0.0?\\
??????--leader-elect=true?\\
??????--kubeconfig=/etc/kubernetes/scheduler.kubeconfig

Restart=always
RestartSec=10s

[Install]
WantedBy=multi-user.target

EOF

參數(shù)

這是一個用于啟動?Kubernetes?調(diào)度器的?systemd?服務(wù)單元文件。下面是對每個部分的詳細解釋:

[Unit]:單元的基本信息部分,用于描述和標識這個服務(wù)單元。
Description:服務(wù)單元的描述信息,說明了該服務(wù)單元的作用,這里是?Kubernetes?調(diào)度器。
Documentation:可選項,提供了關(guān)于該服務(wù)單元的文檔鏈接。
After:定義了該服務(wù)單元在哪些其他單元之后啟動,這里是?network.target,即在網(wǎng)絡(luò)服務(wù)啟動之后啟動。

[Service]:定義了服務(wù)的運行參數(shù)和行為。
ExecStart:指定服務(wù)啟動時執(zhí)行的命令,這里是?/usr/local/bin/kube-scheduler,并通過后續(xù)的行繼續(xù)傳遞了一系列的參數(shù)設(shè)置。
Restart:定義了服務(wù)在退出后的重新啟動策略,這里設(shè)置為?always,表示總是重新啟動服務(wù)。
RestartSec:定義了重新啟動服務(wù)的時間間隔,這里設(shè)置為?10?秒。

[Install]:定義了如何安裝和啟用服務(wù)單元。
WantedBy:指定了服務(wù)單元所屬的?target,這里是?multi-user.target,表示啟動多用戶模式下的服務(wù)。

在?ExecStart?中傳遞的參數(shù)說明如下:

--v=2:設(shè)置日志的詳細級別為?2。
--bind-address=0.0.0.0:綁定的?IP?地址,用于監(jiān)聽?Kubernetes?控制平面的請求,這里設(shè)置為?0.0.0.0,表示監(jiān)聽所有網(wǎng)絡(luò)接口上的請求。
--leader-elect=true:啟用?Leader?選舉機制,確保只有一個調(diào)度器作為?leader?在運行。
--kubeconfig=/etc/kubernetes/scheduler.kubeconfig:kubeconfig?文件的路徑,包含了與?Kubernetes?API?服務(wù)器通信所需的配置信息。

這個服務(wù)單元文件描述了?Kubernetes?調(diào)度器的啟動參數(shù)和行為,并且定義了服務(wù)的依賴關(guān)系和重新啟動策略。通過?systemd?啟動該服務(wù)單元,即可啟動?Kubernetes?調(diào)度器組件。

6.3.2啟動并查看服務(wù)狀態(tài)

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?kube-scheduler.service
#?啟用并立即啟動kube-scheduler.service單元。kube-scheduler.service是kube-scheduler守護進程的systemd服務(wù)單元。

systemctl?restart?kube-scheduler.service
#?重啟kube-scheduler.service單元,即重新啟動etcd守護進程。

systemctl?status?kube-scheduler.service
#?kube-scheduler.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

7.TLS Bootstrapping配置

7.1在master01上配置

#?在《5.高可用配置》選擇使用那種高可用方案
#?若使用?haproxy、keepalived?那么為?`--server=https://192.168.0.36:8443`
#?若使用?nginx方案,那么為?`--server=https://127.0.0.1:8443`

cd?bootstrap

kubectl?config?set-cluster?kubernetes?????\
--certificate-authority=/etc/kubernetes/pki/ca.pem?????\
--embed-certs=true?????--server=https://127.0.0.1:8443?????\
--kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig
#?這是一個使用?kubectl?命令設(shè)置?Kubernetes?集群配置的命令示例。下面是對每個選項的詳細解釋:
#?
#?config?set-cluster?kubernetes:指定要設(shè)置的集群名稱為?"kubernetes",表示要修改名為?"kubernetes"?的集群配置。
#?--certificate-authority=/etc/kubernetes/pki/ca.pem:指定證書頒發(fā)機構(gòu)(CA)的證書文件路徑,用于驗證服務(wù)器證書的有效性。
#?--embed-certs=true:將證書文件嵌入到生成的?kubeconfig?文件中。這樣可以避免在?kubeconfig?文件中引用外部證書文件。
#?--server=https://127.0.0.1:8443:指定?Kubernetes?API?服務(wù)器的地址和端口,這里使用的是?https?協(xié)議和本地地址(127.0.0.1),端口號為?8443。你可以根據(jù)實際環(huán)境修改該參數(shù)。
#?--kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig:指定?kubeconfig?文件的路徑和名稱,這里是?/etc/kubernetes/bootstrap-kubelet.kubeconfig。
#?通過執(zhí)行此命令,你可以設(shè)置名為?"kubernetes"?的集群配置,并提供?CA?證書、API?服務(wù)器地址和端口,并將這些配置信息嵌入到?bootstrap-kubelet.kubeconfig?文件中。這個?kubeconfig?文件可以用于認證和授權(quán)?kubelet?組件與?Kubernetes?API?服務(wù)器之間的通信。請確保路徑和文件名與實際環(huán)境中的配置相匹配。

kubectl?config?set-credentials?tls-bootstrap-token-user?????\
--token=c8ad9c.2e4d610cf3e7426e?\
--kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig
#?這是一個使用?kubectl?命令設(shè)置憑證信息的命令示例。下面是對每個選項的詳細解釋:
#?
#?config?set-credentials?tls-bootstrap-token-user:指定要設(shè)置的憑證名稱為?"tls-bootstrap-token-user",表示要修改名為?"tls-bootstrap-token-user"?的用戶憑證配置。
#?--token=c8ad9c.2e4d610cf3e7426e:指定用戶的身份驗證令牌(token)。在這個示例中,令牌是?c8ad9c.2e4d610cf3e7426e。你可以根據(jù)實際情況修改該令牌。
#?--kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig:指定?kubeconfig?文件的路徑和名稱,這里是?/etc/kubernetes/bootstrap-kubelet.kubeconfig。
#?通過執(zhí)行此命令,你可以設(shè)置名為?"tls-bootstrap-token-user"?的用戶憑證,并將令牌信息加入到?bootstrap-kubelet.kubeconfig?文件中。這個?kubeconfig?文件可以用于認證和授權(quán)?kubelet?組件與?Kubernetes?API?服務(wù)器之間的通信。請確保路徑和文件名與實際環(huán)境中的配置相匹配。

kubectl?config?set-context?tls-bootstrap-token-user@kubernetes?????\
--cluster=kubernetes?????\
--user=tls-bootstrap-token-user?????\
--kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig
#?這是一個使用?kubectl?命令設(shè)置上下文信息的命令示例。下面是對每個選項的詳細解釋:
#?
#?config?set-context?tls-bootstrap-token-user@kubernetes:指定要設(shè)置的上下文名稱為?"tls-bootstrap-token-user@kubernetes",表示要修改名為?"tls-bootstrap-token-user@kubernetes"?的上下文配置。
#?--cluster=kubernetes:指定上下文關(guān)聯(lián)的集群名稱為?"kubernetes",表示使用名為?"kubernetes"?的集群配置。
#?--user=tls-bootstrap-token-user:指定上下文關(guān)聯(lián)的用戶憑證名稱為?"tls-bootstrap-token-user",表示使用名為?"tls-bootstrap-token-user"?的用戶憑證配置。
#?--kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig:指定?kubeconfig?文件的路徑和名稱,這里是?/etc/kubernetes/bootstrap-kubelet.kubeconfig。
#?通過執(zhí)行此命令,你可以設(shè)置名為?"tls-bootstrap-token-user@kubernetes"?的上下文,并將其關(guān)聯(lián)到名為?"kubernetes"?的集群配置和名為?"tls-bootstrap-token-user"?的用戶憑證配置。這樣,bootstrap-kubelet.kubeconfig?文件就包含了完整的上下文信息,可以用于指定與?Kubernetes?集群建立連接時要使用的集群和憑證。請確保路徑和文件名與實際環(huán)境中的配置相匹配。

kubectl?config?use-context?tls-bootstrap-token-user@kubernetes?????\
--kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig
#?這是一個使用?kubectl?命令設(shè)置當前上下文的命令示例。下面是對每個選項的詳細解釋:
#?
#?config?use-context?tls-bootstrap-token-user@kubernetes:指定要使用的上下文名稱為?"tls-bootstrap-token-user@kubernetes",表示要將當前上下文切換為名為?"tls-bootstrap-token-user@kubernetes"?的上下文。
#?--kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig:指定?kubeconfig?文件的路徑和名稱,這里是?/etc/kubernetes/bootstrap-kubelet.kubeconfig。
#?通過執(zhí)行此命令,你可以將當前上下文設(shè)置為名為?"tls-bootstrap-token-user@kubernetes"?的上下文。這樣,當你執(zhí)行其他?kubectl?命令時,它們將使用該上下文與?Kubernetes?集群進行交互。請確保路徑和文件名與實際環(huán)境中的配置相匹配。


#?token的位置在bootstrap.secret.yaml,如果修改的話到這個文件修改
mkdir?-p?/root/.kube?;?cp?/etc/kubernetes/admin.kubeconfig?/root/.kube/config

7.2查看集群狀態(tài),沒問題的話繼續(xù)后續(xù)操作

kubectl?get?cs
Warning:?v1?ComponentStatus?is?deprecated?in?v1.19+
NAME?????????????????STATUS????MESSAGE?????????????????????????ERROR
scheduler????????????Healthy???ok??????????????????????????????
controller-manager???Healthy???ok??????????????????????????????
etcd-0???????????????Healthy???{"health":"true","reason":""}???
etcd-2???????????????Healthy???{"health":"true","reason":""}???
etcd-1???????????????Healthy???{"health":"true","reason":""}?

#?切記執(zhí)行,別忘記!??!
kubectl?create?-f?bootstrap.secret.yaml

8.node節(jié)點配置

8.1.在master01上將證書復制到node節(jié)點

cd?/etc/kubernetes/

for?NODE?in?k8s-master02?k8s-master03?k8s-node01?k8s-node02;?do?ssh?$NODE?mkdir?-p?/etc/kubernetes/pki;?for?FILE?in?pki/ca.pem?pki/ca-key.pem?pki/front-proxy-ca.pem?bootstrap-kubelet.kubeconfig?kube-proxy.kubeconfig;?do?scp?/etc/kubernetes/$FILE?$NODE:/etc/kubernetes/${FILE};?done;?done

8.2.kubelet配置

注意 : 8.2.1 和 8.2.2 需要和 上方 2.1 和 2.2 對應(yīng)起來

8.2.1當使用docker作為Runtime

cat?>?/usr/lib/systemd/system/kubelet.service?<<?EOF

[Unit]
Description=Kubernetes?Kubelet
Documentation=https://github.com/kubernetes/kubernetes

[Service]
ExecStart=/usr/local/bin/kubelet?\\
????--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig??\\
????--kubeconfig=/etc/kubernetes/kubelet.kubeconfig?\\
????--config=/etc/kubernetes/kubelet-conf.yml?\\
????--container-runtime-endpoint=unix:///run/cri-dockerd.sock??\\
????--node-labels=node.kubernetes.io/node=

[Install]
WantedBy=multi-user.target
EOF

#?這是一個表示?Kubernetes?Kubelet?服務(wù)的?systemd?單位文件示例。下面是對每個節(jié)([Unit]、[Service]、[Install])的詳細解釋:
#?
#?[Unit]
#?
#?Description=Kubernetes?Kubelet:指定了此單位文件對應(yīng)的服務(wù)描述信息為?"Kubernetes?Kubelet"。
#?Documentation=...:指定了對該服務(wù)的文檔鏈接。
#?[Service]
#?
#?ExecStart=/usr/local/bin/kubelet?...:指定了啟動?Kubelet?服務(wù)的命令和參數(shù)。這里使用的是?/usr/local/bin/kubelet?命令,并傳遞了一系列參數(shù)來配置?Kubelet?的運行。這些參數(shù)包括:
#?--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig:指定了用于引導?kubelet?的?kubeconfig?文件的路徑和名稱。
#?--kubeconfig=/etc/kubernetes/kubelet.kubeconfig:指定了?kubelet?的?kubeconfig?文件的路徑和名稱。
#?--config=/etc/kubernetes/kubelet-conf.yml:指定了?kubelet?的配置文件的路徑和名稱。
#?--container-runtime-endpoint=unix:///run/cri-dockerd.sock:指定了容器運行時接口的端點地址,這里使用的是?Docker?運行時(cri-dockerd)的?UNIX?套接字。
#?--node-labels=node.kubernetes.io/node=:指定了節(jié)點的標簽。這里的示例只給節(jié)點添加了一個簡單的標簽?node.kubernetes.io/node=。
#?[Install]
#?
#?WantedBy=multi-user.target:指定了在?multi-user.target?被啟動時,該服務(wù)應(yīng)該被啟用。
#?通過這個單位文件,你可以配置?Kubelet?服務(wù)的啟動參數(shù),指定相關(guān)的配置文件和憑證文件,以及定義節(jié)點的標簽。請確認路徑和文件名與你的實際環(huán)境中的配置相匹配。

8.2.2當使用Containerd作為Runtime (推薦)

mkdir?-p?/var/lib/kubelet?/var/log/kubernetes?/etc/systemd/system/kubelet.service.d?/etc/kubernetes/manifests/

#?所有k8s節(jié)點配置kubelet?service
cat?>?/usr/lib/systemd/system/kubelet.service?<<?EOF

[Unit]
Description=Kubernetes?Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=containerd.service
Requires=containerd.service

[Service]
ExecStart=/usr/local/bin/kubelet?\\
????--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig??\\
????--kubeconfig=/etc/kubernetes/kubelet.kubeconfig?\\
????--config=/etc/kubernetes/kubelet-conf.yml?\\
????--container-runtime-endpoint=unix:///run/containerd/containerd.sock??\\
????--node-labels=node.kubernetes.io/node=

[Install]
WantedBy=multi-user.target
EOF

#?這是一個表示?Kubernetes?Kubelet?服務(wù)的?systemd?單位文件示例。與之前相比,添加了?After?和?Requires?字段來指定依賴關(guān)系。
#?
#?[Unit]
#?
#?Description=Kubernetes?Kubelet:指定了此單位文件對應(yīng)的服務(wù)描述信息為?"Kubernetes?Kubelet"。
#?Documentation=...:指定了對該服務(wù)的文檔鏈接。
#?After=containerd.service:指定了該服務(wù)在?containerd.service?服務(wù)之后啟動。這表示?Kubelet?服務(wù)依賴于?containerd?服務(wù)的啟動。
#?Requires=containerd.service:指定了該服務(wù)需要?containerd.service?服務(wù)存在。這表示?Kubelet?服務(wù)依賴于?containerd?服務(wù)的存在。
#?[Service]
#?
#?ExecStart=/usr/local/bin/kubelet?...:指定了啟動?Kubelet?服務(wù)的命令和參數(shù),與之前的示例相同。
#?--container-runtime-endpoint=unix:///run/containerd/containerd.sock:修改了容器運行時接口的端點地址,將其更改為使用?containerd?運行時(通過?UNIX?套接字)。
#?[Install]
#?
#?WantedBy=multi-user.target:指定了在?multi-user.target?被啟動時,該服務(wù)應(yīng)該被啟用。
#?通過這個單位文件,你可以配置?Kubelet?服務(wù)的啟動參數(shù),并指定了它依賴的?containerd?服務(wù)。確保路徑和文件名與你實際環(huán)境中的配置相匹配。

8.2.3所有k8s節(jié)點創(chuàng)建kubelet的配置文件

cat?>?/etc/kubernetes/kubelet-conf.yml?<<EOF
apiVersion:?kubelet.config.k8s.io/v1beta1
kind:?KubeletConfiguration
address:?0.0.0.0
port:?10250
readOnlyPort:?10255
authentication:
??anonymous:
????enabled:?false
??webhook:
????cacheTTL:?2m0s
????enabled:?true
??x509:
????clientCAFile:?/etc/kubernetes/pki/ca.pem
authorization:
??mode:?Webhook
??webhook:
????cacheAuthorizedTTL:?5m0s
????cacheUnauthorizedTTL:?30s
cgroupDriver:?systemd
cgroupsPerQOS:?true
clusterDNS:
-?10.96.0.10
clusterDomain:?cluster.local
containerLogMaxFiles:?5
containerLogMaxSize:?10Mi
contentType:?application/vnd.kubernetes.protobuf
cpuCFSQuota:?true
cpuManagerPolicy:?none
cpuManagerReconcilePeriod:?10s
enableControllerAttachDetach:?true
enableDebuggingHandlers:?true
enforceNodeAllocatable:
-?pods
eventBurst:?10
eventRecordQPS:?5
evictionHard:
??imagefs.available:?15%
??memory.available:?100Mi
??nodefs.available:?10%
??nodefs.inodesFree:?5%
evictionPressureTransitionPeriod:?5m0s
failSwapOn:?true
fileCheckFrequency:?20s
hairpinMode:?promiscuous-bridge
healthzBindAddress:?127.0.0.1
healthzPort:?10248
httpCheckFrequency:?20s
imageGCHighThresholdPercent:?85
imageGCLowThresholdPercent:?80
imageMinimumGCAge:?2m0s
iptablesDropBit:?15
iptablesMasqueradeBit:?14
kubeAPIBurst:?10
kubeAPIQPS:?5
makeIPTablesUtilChains:?true
maxOpenFiles:?1000000
maxPods:?110
nodeStatusUpdateFrequency:?10s
oomScoreAdj:?-999
podPidsLimit:?-1
registryBurst:?10
registryPullQPS:?5
resolvConf:?/etc/resolv.conf
rotateCertificates:?true
runtimeRequestTimeout:?2m0s
serializeImagePulls:?true
staticPodPath:?/etc/kubernetes/manifests
streamingConnectionIdleTimeout:?4h0m0s
syncFrequency:?1m0s
volumeStatsAggPeriod:?1m0s
EOF

8.2.4啟動kubelet

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?kubelet.service
#?啟用并立即啟動kubelet.service單元。kubelet.service是kubelet守護進程的systemd服務(wù)單元。

systemctl?restart?kubelet.service
#?重啟kubelet.service單元,即重新啟動kubelet守護進程。

systemctl?status?kubelet.service
#?kubelet.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

8.2.5查看集群

[root@k8s-master01?~]#?kubectl??get?node
NAME???????????STATUS?????ROLES????AGE???VERSION
k8s-master01???Ready????<none>???18s???v1.28.0
k8s-master02???Ready????<none>???16s???v1.28.0
k8s-master03???Ready????<none>???16s???v1.28.0
k8s-node01?????Ready????<none>???14s???v1.28.0
k8s-node02?????Ready????<none>???14s???v1.28.0
[root@k8s-master01?~]#

8.2.6查看容器運行時

[root@k8s-master01?~]#?kubectl?describe?node?|?grep?Runtime
??Container?Runtime?Version:??containerd://1.7.3
??Container?Runtime?Version:??containerd://1.7.3
??Container?Runtime?Version:??containerd://1.7.3
??Container?Runtime?Version:??containerd://1.7.3
??Container?Runtime?Version:??containerd://1.7.3
[root@k8s-master01?~]#?kubectl?describe?node?|?grep?Runtime
??Container?Runtime?Version:??docker://24.0.5
??Container?Runtime?Version:??docker://24.0.5
??Container?Runtime?Version:??docker://24.0.5
??Container?Runtime?Version:??docker://24.0.5
??Container?Runtime?Version:??docker://24.0.5

8.3.kube-proxy配置

8.3.1將kubeconfig發(fā)送至其他節(jié)點

#?master-1執(zhí)行
for?NODE?in?k8s-master02?k8s-master03?k8s-node01?k8s-node02;?do?scp?/etc/kubernetes/kube-proxy.kubeconfig?$NODE:/etc/kubernetes/kube-proxy.kubeconfig;?done

8.3.2所有k8s節(jié)點添加kube-proxy的service文件

cat?>??/usr/lib/systemd/system/kube-proxy.service?<<?EOF
[Unit]
Description=Kubernetes?Kube?Proxy
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
ExecStart=/usr/local/bin/kube-proxy?\\
??--config=/etc/kubernetes/kube-proxy.yaml?\\
??--v=2
Restart=always
RestartSec=10s

[Install]
WantedBy=multi-user.target

EOF

8.3.3所有k8s節(jié)點添加kube-proxy的配置

cat?>?/etc/kubernetes/kube-proxy.yaml?<<?EOF
apiVersion:?kubeproxy.config.k8s.io/v1alpha1
bindAddress:?0.0.0.0
clientConnection:
??acceptContentTypes:?""
??burst:?10
??contentType:?application/vnd.kubernetes.protobuf
??kubeconfig:?/etc/kubernetes/kube-proxy.kubeconfig
??qps:?5
clusterCIDR:?172.16.0.0/12,fc00:2222::/112
configSyncPeriod:?15m0s
conntrack:
??max:?null
??maxPerCore:?32768
??min:?131072
??tcpCloseWaitTimeout:?1h0m0s
??tcpEstablishedTimeout:?24h0m0s
enableProfiling:?false
healthzBindAddress:?0.0.0.0:10256
hostnameOverride:?""
iptables:
??masqueradeAll:?false
??masqueradeBit:?14
??minSyncPeriod:?0s
??syncPeriod:?30s
ipvs:
??masqueradeAll:?true
??minSyncPeriod:?5s
??scheduler:?"rr"
??syncPeriod:?30s
kind:?KubeProxyConfiguration
metricsBindAddress:?127.0.0.1:10249
mode:?"ipvs"
nodePortAddresses:?null
oomScoreAdj:?-999
portRange:?""
udpIdleTimeout:?250ms
EOF

8.3.4啟動kube-proxy

systemctl?daemon-reload
#?用于重新加載systemd管理的單位文件。當你新增或修改了某個單位文件(如.service文件、.socket文件等),需要運行該命令來刷新systemd對該文件的配置。

systemctl?enable?--now?kube-proxy.service
#?啟用并立即啟動kube-proxy.service單元。kube-proxy.service是kube-proxy守護進程的systemd服務(wù)單元。

systemctl?restart?kube-proxy.service
#?重啟kube-proxy.service單元,即重新啟動kube-proxy守護進程。

systemctl?status?kube-proxy.service
#?kube-proxy.service單元的當前狀態(tài),包括運行狀態(tài)、是否啟用等信息。

9.安裝網(wǎng)絡(luò)插件

注意 9.1 和 9.2 二選其一即可,建議在此處創(chuàng)建好快照后在進行操作,后續(xù)出問題可以回滾

** centos7 要升級libseccomp 不然 無法安裝網(wǎng)絡(luò)插件**

#?https://github.com/opencontainers/runc/releases
#?升級runc
#?wget?https://ghproxy.com/https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64

install?-m?755?runc.amd64?/usr/local/sbin/runc
cp?-p?/usr/local/sbin/runc??/usr/local/bin/runc
cp?-p?/usr/local/sbin/runc??/usr/bin/runc

#下載高于2.4以上的包
yum?-y?install?http://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/libseccomp-2.5.1-1.el8.x86_64.rpm
#?清華源
yum?-y?install?https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/BaseOS/x86_64/os/Packages/libseccomp-2.5.1-1.el8.x86_64.rpm

#查看當前版本
[root@k8s-master-1?~]#?rpm?-qa?|?grep?libseccomp
libseccomp-2.5.1-1.el8.x86_64

9.1安裝Calico

9.1.1更改calico網(wǎng)段

wget?https://mirrors.chenby.cn/https://github.com/projectcalico/calico/blob/master/manifests/calico-typha.yaml

cp?calico-typha.yaml?calico.yaml
cp?calico-typha.yaml?calico-ipv6.yaml

vim?calico.yaml
#?calico-config?ConfigMap處
????"ipam":?{
????????"type":?"calico-ipam",
????},
????-?name:?IP
??????value:?"autodetect"

????-?name:?CALICO_IPV4POOL_CIDR
??????value:?"172.16.0.0/12"

#?vim?calico-ipv6.yaml
#?calico-config?ConfigMap處
????"ipam":?{
????????"type":?"calico-ipam",
????????"assign_ipv4":?"true",
????????"assign_ipv6":?"true"
????},
????-?name:?IP
??????value:?"autodetect"

????-?name:?IP6
??????value:?"autodetect"

????-?name:?CALICO_IPV4POOL_CIDR
??????value:?"172.16.0.0/12"

????-?name:?CALICO_IPV6POOL_CIDR
??????value:?"fc00:2222::/112"

????-?name:?FELIX_IPV6SUPPORT
??????value:?"true"


#?若docker鏡像拉不下來,可以使用國內(nèi)的倉庫
sed?-i?"s#docker.io/calico/#m.daocloud.io/docker.io/calico/#g"?calico.yaml?
sed?-i?"s#docker.io/calico/#m.daocloud.io/docker.io/calico/#g"?calico-ipv6.yaml

sed?-i?"s#m.daocloud.io/docker.io/calico/#docker.io/calico/#g"?calico.yaml?
sed?-i?"s#m.daocloud.io/docker.io/calico/#docker.io/calico/#g"?calico-ipv6.yaml

#?本地沒有公網(wǎng)?IPv6?使用?calico.yaml
kubectl?apply?-f?calico.yaml

#?本地有公網(wǎng)?IPv6?使用?calico-ipv6.yaml?
#?kubectl?apply?-f?calico-ipv6.yaml

9.1.2查看容器狀態(tài)

#?calico?初始化會很慢?需要耐心等待一下,大約十分鐘左右
[root@k8s-master01?~]#?kubectl??get?pod?-A
NAMESPACE?????NAME???????????????????????????????????????READY???STATUS????RESTARTS???AGE
kube-system???calico-kube-controllers-6747f75cdc-fbvvc???1/1?????Running???0??????????61s
kube-system???calico-node-fs7hl??????????????????????????1/1?????Running???0??????????61s
kube-system???calico-node-jqz58??????????????????????????1/1?????Running???0??????????61s
kube-system???calico-node-khjlg??????????????????????????1/1?????Running???0??????????61s
kube-system???calico-node-wmf8q??????????????????????????1/1?????Running???0??????????61s
kube-system???calico-node-xc6gn??????????????????????????1/1?????Running???0??????????61s
kube-system???calico-typha-6cdc4b4fbc-57snb??????????????1/1?????Running???0??????????61s

9.2 安裝cilium

9.2.1 安裝helm

#?[root@k8s-master01?~]#?curl?-fsSL?-o?get_helm.sh?https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
#?[root@k8s-master01?~]#?chmod?700?get_helm.sh
#?[root@k8s-master01?~]#?./get_helm.sh

wget?https://mirrors.huaweicloud.com/helm/v3.12.3/helm-v3.12.3-linux-amd64.tar.gz
tar?xvf?helm-*-linux-amd64.tar.gz
cp?linux-amd64/helm?/usr/local/bin/

9.2.2 安裝cilium

#?添加源
helm?repo?add?cilium?https://helm.cilium.io

#?修改為國內(nèi)源
helm?pull?cilium/cilium
tar?xvf?cilium-*.tgz
cd?cilium/
sed?-i?"s#quay.io/#m.daocloud.io/quay.io/#g"?values.yaml

#?默認參數(shù)安裝
helm?install??cilium?./cilium/?-n?kube-system

#?啟用ipv6
#?helm?install?cilium?cilium/cilium?--namespace?kube-system?--set?ipv6.enabled=true

#?啟用路由信息和監(jiān)控插件
#?helm?install?cilium?cilium/cilium?--namespace?kube-system?--set?hubble.relay.enabled=true?--set?hubble.ui.enabled=true?--set?prometheus.enabled=true?--set?operator.prometheus.enabled=true?--set?hubble.enabled=true?--set?hubble.metrics.enabled="{dns,drop,tcp,flow,port-distribution,icmp,http}"

9.2.3 查看

[root@k8s-master01?~]#?kubectl??get?pod?-A?|?grep?cil
kube-system???cilium-gmr6c???????????????????????1/1?????Running???????0?????????????5m3s
kube-system???cilium-kzgdj???????????????????????1/1?????Running???????0?????????????5m3s
kube-system???cilium-operator-69b677f97c-6pw4k???1/1?????Running???????0?????????????5m3s
kube-system???cilium-operator-69b677f97c-xzzdk???1/1?????Running???????0?????????????5m3s
kube-system???cilium-q2rnr???????????????????????1/1?????Running???????0?????????????5m3s
kube-system???cilium-smx5v???????????????????????1/1?????Running???????0?????????????5m3s
kube-system???cilium-tdjq4???????????????????????1/1?????Running???????0?????????????5m3s
[root@k8s-master01?~]#

9.2.4 下載專屬監(jiān)控面板

安裝時候沒有創(chuàng)建 監(jiān)控可以忽略

[root@k8s-master01?yaml]#?wget?https://mirrors.chenby.cn/https://raw.githubusercontent.com/cilium/cilium/1.12.1/examples/kubernetes/addons/prometheus/monitoring-example.yaml

[root@k8s-master01?yaml]#?sed?-i?"s#docker.io/#m.daocloud.io/docker.io/#g"?monitoring-example.yaml

[root@k8s-master01?yaml]#?kubectl??apply?-f?monitoring-example.yaml
[root@k8s-master01?yaml]#

9.2.5 下載部署測試用例

說明 測試用例 需要在 安裝CoreDNS 之后即可完成

wget?https://mirrors.chenby.cn/https://raw.githubusercontent.com/cilium/cilium/master/examples/kubernetes/connectivity-check/connectivity-check.yaml

sed?-i?"s#google.com#baidu.cn#g"?connectivity-check.yaml
sed?-i?"s#quay.io/#m.daocloud.io/quay.io/#g"?connectivity-check.yaml

kubectl??apply?-f?connectivity-check.yaml

9.2.6 查看pod

[root@k8s-master01?yaml]#?kubectl??get?pod?-A
NAMESPACE???????????NAME?????????????????????????????????????????????????????READY???STATUS????RESTARTS??????AGE
cilium-monitoring???grafana-59957b9549-6zzqh?????????????????????????????????1/1?????Running???0?????????????10m
cilium-monitoring???prometheus-7c8c9684bb-4v9cl??????????????????????????????1/1?????Running???0?????????????10m
default?????????????chenby-75b5d7fbfb-7zjsr??????????????????????????????????1/1?????Running???0?????????????27h
default?????????????chenby-75b5d7fbfb-hbvr8??????????????????????????????????1/1?????Running???0?????????????27h
default?????????????chenby-75b5d7fbfb-ppbzg??????????????????????????????????1/1?????Running???0?????????????27h
default?????????????echo-a-6799dff547-pnx6w??????????????????????????????????1/1?????Running???0?????????????10m
default?????????????echo-b-fc47b659c-4bdg9???????????????????????????????????1/1?????Running???0?????????????10m
default?????????????echo-b-host-67fcfd59b7-28r9s?????????????????????????????1/1?????Running???0?????????????10m
default?????????????host-to-b-multi-node-clusterip-69c57975d6-z4j2z??????????1/1?????Running???0?????????????10m
default?????????????host-to-b-multi-node-headless-865899f7bb-frrmc???????????1/1?????Running???0?????????????10m
default?????????????pod-to-a-allowed-cnp-5f9d7d4b9d-hcd8x????????????????????1/1?????Running???0?????????????10m
default?????????????pod-to-a-denied-cnp-65cc5ff97b-2rzb8?????????????????????1/1?????Running???0?????????????10m
default?????????????pod-to-a-dfc64f564-p7xcn?????????????????????????????????1/1?????Running???0?????????????10m
default?????????????pod-to-b-intra-node-nodeport-677868746b-trk2l????????????1/1?????Running???0?????????????10m
default?????????????pod-to-b-multi-node-clusterip-76bbbc677b-knfq2???????????1/1?????Running???0?????????????10m
default?????????????pod-to-b-multi-node-headless-698c6579fd-mmvd7????????????1/1?????Running???0?????????????10m
default?????????????pod-to-b-multi-node-nodeport-5dc4b8cfd6-8dxmz????????????1/1?????Running???0?????????????10m
default?????????????pod-to-external-1111-8459965778-pjt9b????????????????????1/1?????Running???0?????????????10m
default?????????????pod-to-external-fqdn-allow-google-cnp-64df9fb89b-l9l4q???1/1?????Running???0?????????????10m
kube-system?????????cilium-7rfj6?????????????????????????????????????????????1/1?????Running???0?????????????56s
kube-system?????????cilium-d4cch?????????????????????????????????????????????1/1?????Running???0?????????????56s
kube-system?????????cilium-h5x8r?????????????????????????????????????????????1/1?????Running???0?????????????56s
kube-system?????????cilium-operator-5dbddb6dbf-flpl5?????????????????????????1/1?????Running???0?????????????56s
kube-system?????????cilium-operator-5dbddb6dbf-gcznc?????????????????????????1/1?????Running???0?????????????56s
kube-system?????????cilium-t2xlz?????????????????????????????????????????????1/1?????Running???0?????????????56s
kube-system?????????cilium-z65z7?????????????????????????????????????????????1/1?????Running???0?????????????56s
kube-system?????????coredns-665475b9f8-jkqn8?????????????????????????????????1/1?????Running???1?(36h?ago)???36h
kube-system?????????hubble-relay-59d8575-9pl9z???????????????????????????????1/1?????Running???0?????????????56s
kube-system?????????hubble-ui-64d4995d57-nsv9j???????????????????????????????2/2?????Running???0?????????????56s
kube-system?????????metrics-server-776f58c94b-c6zgs??????????????????????????1/1?????Running???1?(36h?ago)???37h
[root@k8s-master01?yaml]#

9.2.7 修改為NodePort

安裝時候沒有創(chuàng)建 監(jiān)控可以忽略

[root@k8s-master01?yaml]#?kubectl??edit?svc??-n?kube-system?hubble-ui
service/hubble-ui?edited
[root@k8s-master01?yaml]#
[root@k8s-master01?yaml]#?kubectl??edit?svc??-n?cilium-monitoring?grafana
service/grafana?edited
[root@k8s-master01?yaml]#
[root@k8s-master01?yaml]#?kubectl??edit?svc??-n?cilium-monitoring?prometheus
service/prometheus?edited
[root@k8s-master01?yaml]#

type:?NodePort

9.2.8 查看端口

安裝時候沒有創(chuàng)建 監(jiān)控可以忽略

[root@k8s-master01?yaml]#?kubectl?get?svc?-A?|?grep?monit
cilium-monitoring???grafana????????????????NodePort????10.100.250.17????<none>????????3000:30707/TCP???????????15m
cilium-monitoring???prometheus?????????????NodePort????10.100.131.243???<none>????????9090:31155/TCP???????????15m
[root@k8s-master01?yaml]#
[root@k8s-master01?yaml]#?kubectl?get?svc?-A?|?grep?hubble
kube-system?????????hubble-metrics?????????ClusterIP???None?????????????<none>????????9965/TCP?????????????????5m12s
kube-system?????????hubble-peer????????????ClusterIP???10.100.150.29????<none>????????443/TCP??????????????????5m12s
kube-system?????????hubble-relay???????????ClusterIP???10.109.251.34????<none>????????80/TCP???????????????????5m12s
kube-system?????????hubble-ui??????????????NodePort????10.102.253.59????<none>????????80:31219/TCP?????????????5m12s
[root@k8s-master01?yaml]#

9.2.9 訪問

安裝時候沒有創(chuàng)建 監(jiān)控可以忽略

http://192.168.0.31:30707
http://192.168.0.31:31155
http://192.168.0.31:31219

10.安裝CoreDNS

10.1以下步驟只在master01操作

10.1.1修改文件

#?下載tgz包
helm?repo?add?coredns?https://coredns.github.io/helm
helm?pull?coredns/coredns
tar?xvf?coredns-*.tgz
cd?coredns/

#?修改IP地址
vim?values.yaml
cat?values.yaml?|?grep?clusterIP:
clusterIP:?"10.96.0.10"

#?示例
---
service:
#?clusterIP:?""
#?clusterIPs:?[]
#?loadBalancerIP:?""
#?externalIPs:?[]
#?externalTrafficPolicy:?""
#?ipFamilyPolicy:?""
??#?The?name?of?the?Service
??#?If?not?set,?a?name?is?generated?using?the?fullname?template
??clusterIP:?"10.96.0.10"
??name:?""
??annotations:?{}
---

#?修改為國內(nèi)源?docker源可選
sed?-i?"s#coredns/#m.daocloud.io/docker.io/coredns/#g"?values.yaml
sed?-i?"s#registry.k8s.io/#m.daocloud.io/registry.k8s.io/#g"?values.yaml

#?默認參數(shù)安裝
helm?install??coredns?./coredns/?-n?kube-system

11.安裝Metrics Server

11.1以下步驟只在master01操作

11.1.1安裝Metrics-server

在新版的Kubernetes中系統(tǒng)資源的采集均使用Metrics-server,可以通過Metrics采集節(jié)點和Pod的內(nèi)存、磁盤、CPU和網(wǎng)絡(luò)的使用率

#?單機版?
wget?https://mirrors.chenby.cn/https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
#?高可用版本
wget?https://mirrors.chenby.cn/https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability.yaml


#?修改配置
vim?components.yaml
vim?high-availability.yaml

---
#?1
defaultArgs:
????????-?--cert-dir=/tmp
????????-?--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
????????-?--kubelet-use-node-status-port
????????-?--metric-resolution=15s
????????-?--kubelet-insecure-tls
????????-?--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem
????????-?--requestheader-username-headers=X-Remote-User
????????-?--requestheader-group-headers=X-Remote-Group
????????-?--requestheader-extra-headers-prefix=X-Remote-Extra-

#?2
????????volumeMounts:
????????-?mountPath:?/tmp
??????????name:?tmp-dir
????????-?name:?ca-ssl
??????????mountPath:?/etc/kubernetes/pki

#?3
??????volumes:
??????-?emptyDir:?{}
????????name:?tmp-dir
??????-?name:?ca-ssl
????????hostPath:
??????????path:?/etc/kubernetes/pki
---


#?修改為國內(nèi)源?docker源可選
sed?-i?"s#registry.k8s.io/#m.daocloud.io/registry.k8s.io/#g"?*.yaml

#?二選一
kubectl?apply?-f?components.yaml
#?kubectl?apply?-f?high-availability.yaml

11.1.2稍等片刻查看狀態(tài)

kubectl??top?node
NAME???????????CPU(cores)???CPU%???MEMORY(bytes)???MEMORY%???
k8s-master01???197m?????????4%?????1497Mi??????????39%???????
k8s-master02???152m?????????3%?????1315Mi??????????34%???????
k8s-master03???112m?????????2%?????1274Mi??????????33%???????
k8s-node01?????142m?????????3%?????777Mi???????????20%???????
k8s-node02?????71m??????????1%?????682Mi???????????17%

12.集群驗證

12.1部署pod資源

cat<<EOF?|?kubectl?apply?-f?-
apiVersion:?v1
kind:?Pod
metadata:
??name:?busybox
??namespace:?default
spec:
??containers:
??-?name:?busybox
????image:?docker.io/library/busybox:1.28
????command:
??????-?sleep
??????-?"3600"
????imagePullPolicy:?IfNotPresent
??restartPolicy:?Always
EOF

#?查看
kubectl??get?pod
NAME??????READY???STATUS????RESTARTS???AGE
busybox???1/1?????Running???0??????????17s

12.2用pod解析默認命名空間中的kubernetes

#?查看name
kubectl?get?svc
NAME?????????TYPE????????CLUSTER-IP???EXTERNAL-IP???PORT(S)???AGE
kubernetes???ClusterIP???10.96.0.1????<none>????????443/TCP???17h

#?進行解析
kubectl?exec??busybox?-n?default?--?nslookup?kubernetes
3Server:????10.96.0.10
Address?1:?10.96.0.10?kube-dns.kube-system.svc.cluster.local

Name:??????kubernetes
Address?1:?10.96.0.1?kubernetes.default.svc.cluster.local

12.3測試跨命名空間是否可以解析

#?查看有那些name
kubectl??get?svc?-A
NAMESPACE?????NAME??????????????TYPE????????CLUSTER-IP??????EXTERNAL-IP???PORT(S)?????????AGE
default???????kubernetes????????ClusterIP???10.96.0.1???????<none>????????443/TCP?????????76m
kube-system???calico-typha??????ClusterIP???10.105.100.82???<none>????????5473/TCP????????35m
kube-system???coredns-coredns???ClusterIP???10.96.0.10??????<none>????????53/UDP,53/TCP???8m14s
kube-system???metrics-server????ClusterIP???10.105.60.31????<none>????????443/TCP?????????109s

#?進行解析
kubectl?exec??busybox?-n?default?--?nslookup?coredns-coredns.kube-system
Server:????10.96.0.10
Address?1:?10.96.0.10?coredns-coredns.kube-system.svc.cluster.local

Name:??????coredns-coredns.kube-system
Address?1:?10.96.0.10?coredns-coredns.kube-system.svc.cluster.local
[root@k8s-master01?metrics-server]#

12.4每個節(jié)點都必須要能訪問Kubernetes的kubernetes svc 443和kube-dns的service 53

telnet?10.96.0.1?443
Trying?10.96.0.1...
Connected?to?10.96.0.1.
Escape?character?is?'^]'.

?telnet?10.96.0.10?53
Trying?10.96.0.10...
Connected?to?10.96.0.10.
Escape?character?is?'^]'.

curl?10.96.0.10:53
curl:?(52)?Empty?reply?from?server

12.5Pod和Pod之前要能通

kubectl?get?po?-owide
NAME??????READY???STATUS????RESTARTS???AGE???IP??????????????NODE?????????NOMINATED?NODE???READINESS?GATES
busybox???1/1?????Running???0??????????17m???172.27.14.193???k8s-node02???<none>???????????<none>

kubectl?get?po?-n?kube-system?-owide
NAME???????????????????????????????????????READY???STATUS????RESTARTS???AGE?????IP???????????????NODE???????????NOMINATED?NODE???READINESS?GATES
calico-kube-controllers-76754ff848-pw4xg???1/1?????Running???0??????????38m?????172.25.244.193???k8s-master01???<none>???????????<none>
calico-node-97m55??????????????????????????1/1?????Running???0??????????38m?????192.168.0.34?????k8s-node01?????<none>???????????<none>
calico-node-hlz7j??????????????????????????1/1?????Running???0??????????38m?????192.168.0.32?????k8s-master02???<none>???????????<none>
calico-node-jtlck??????????????????????????1/1?????Running???0??????????38m?????192.168.0.33?????k8s-master03???<none>???????????<none>
calico-node-lxfkf??????????????????????????1/1?????Running???0??????????38m?????192.168.0.35?????k8s-node02?????<none>???????????<none>
calico-node-t667x??????????????????????????1/1?????Running???0??????????38m?????192.168.0.31?????k8s-master01???<none>???????????<none>
calico-typha-59d75c5dd4-gbhfp??????????????1/1?????Running???0??????????38m?????192.168.0.35?????k8s-node02?????<none>???????????<none>
coredns-coredns-c5c6d4d9b-bd829????????????1/1?????Running???0??????????10m?????172.25.92.65?????k8s-master02???<none>???????????<none>
metrics-server-7c8b55c754-w7q8v????????????1/1?????Running???0??????????3m56s???172.17.125.3?????k8s-node01?????<none>???????????<none>

#?進入busybox?ping其他節(jié)點上的pod

kubectl?exec?-ti?busybox?--?sh
/?#?ping?192.168.0.34
PING?192.168.0.34?(192.168.0.34):?56?data?bytes
64?bytes?from?192.168.0.34:?seq=0?ttl=63?time=0.358?ms
64?bytes?from?192.168.0.34:?seq=1?ttl=63?time=0.668?ms
64?bytes?from?192.168.0.34:?seq=2?ttl=63?time=0.637?ms
64?bytes?from?192.168.0.34:?seq=3?ttl=63?time=0.624?ms
64?bytes?from?192.168.0.34:?seq=4?ttl=63?time=0.907?ms

#?可以連通證明這個pod是可以跨命名空間和跨主機通信的

12.6創(chuàng)建三個副本,可以看到3個副本分布在不同的節(jié)點上(用完可以刪了)

cat?>?deployments.yaml?<<?EOF
apiVersion:?apps/v1
kind:?Deployment
metadata:
??name:?nginx-deployment
??labels:
????app:?nginx
spec:
??replicas:?3
??selector:
????matchLabels:
??????app:?nginx
??template:
????metadata:
??????labels:
????????app:?nginx
????spec:
??????containers:
??????-?name:?nginx
????????image:?nginx
????????ports:
????????-?containerPort:?80

EOF

kubectl??apply?-f?deployments.yaml?
deployment.apps/nginx-deployment?created

kubectl??get?pod?
NAME???????????????????????????????READY???STATUS????RESTARTS???AGE
busybox????????????????????????????1/1?????Running???0??????????6m25s
nginx-deployment-9456bbbf9-4bmvk???1/1?????Running???0??????????8s
nginx-deployment-9456bbbf9-9rcdk???1/1?????Running???0??????????8s
nginx-deployment-9456bbbf9-dqv8s???1/1?????Running???0??????????8s

#?刪除nginx

[root@k8s-master01?~]#?kubectl?delete?-f?deployments.yaml

13.安裝dashboard

helm?repo?add?kubernetes-dashboard?https://kubernetes.github.io/dashboard/
helm?install?kubernetes-dashboard?kubernetes-dashboard/kubernetes-dashboard?--namespace?kube-system

13.1更改dashboard的svc為NodePort,如果已是請忽略

kubectl?edit?svc?kubernetes-dashboard?-n?kube-system

??type:?NodePort

13.2查看端口號

kubectl?get?svc?kubernetes-dashboard?-n?kube-system
NAME???????????????????TYPE???????CLUSTER-IP???????EXTERNAL-IP???PORT(S)?????????AGE
kubernetes-dashboard???NodePort???10.108.120.110???<none>????????443:30034/TCP???34s

13.3創(chuàng)建token

cat?>?dashboard-user.yaml?<<?EOF
apiVersion:?v1
kind:?ServiceAccount
metadata:
??name:?admin-user
??namespace:?kube-system
---
apiVersion:?rbac.authorization.k8s.io/v1
kind:?ClusterRoleBinding
metadata:
??name:?admin-user
roleRef:
??apiGroup:?rbac.authorization.k8s.io
??kind:?ClusterRole
??name:?cluster-admin
subjects:
-?kind:?ServiceAccount
??name:?admin-user
??namespace:?kube-system
EOF

kubectl??apply?-f?dashboard-user.yaml

#?創(chuàng)建token
kubectl?-n?kube-system?create?token?admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6IksxY2U2U19KUWlRMzJSVXdtU2wzak1PdXpJYXVxQTBlbGJHUWlQZWN0ZU0ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjkyNDQ3NzA3LCJpYXQiOjE2OTI0NDQxMDcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiNmE4MWEwY2ItM2U0Yi00ZTNhLTk0N2EtY2ViNDNkOTNjZmUzIn19LCJuYmYiOjE2OTI0NDQxMDcsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbi11c2VyIn0.Ww8zpmguHtxAuUn1EWtNCP2A-d25PGOYO3_FkHyOtj6f0iLm_HTvwM0InlTgIAWnfWMDOHzBLc9m1gYzoaC5efgBVtZkpy900NIhW_-yiQK3cMpiNasKOH7jiPnNMXNXczw3ElZWMqFYXkYRmQRVgVd6t0DmYK_TCXjDiZIU9jCzIDdSWDDI9nIieRGQwY8CzfEM9CKeYYC4a5wOG6t4ZuTcnRAYdZ1KZ7PZ1R73JLauessAtiDUArTIB2xWcWxy_b_J4-wXtsQyW5YOYOQ3Ie9NbERQj9wlprNSLhFqSxq-RUwizGBZ7z7t1RmW134DStU25uA4GkSJBQWK4b1cWA

13.3登錄dashboard

https://192.168.0.31:30034/

14.ingress安裝

14.1執(zhí)行部署

wget?https://mirrors.chenby.cn/https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

#?修改為國內(nèi)源?docker源可選
sed?-i?"s#registry.k8s.io/#m.daocloud.io/registry.k8s.io/#g"?*.yaml

cat?>?backend.yaml?<<?EOF
apiVersion:?apps/v1
kind:?Deployment
metadata:
??name:?default-http-backend
??labels:
????app.kubernetes.io/name:?default-http-backend
??namespace:?kube-system
spec:
??replicas:?1
??selector:
????matchLabels:
??????app.kubernetes.io/name:?default-http-backend
??template:
????metadata:
??????labels:
????????app.kubernetes.io/name:?default-http-backend
????spec:
??????terminationGracePeriodSeconds:?60
??????containers:
??????-?name:?default-http-backend
????????image:?registry.cn-hangzhou.aliyuncs.com/chenby/defaultbackend-amd64:1.5?
????????livenessProbe:
??????????httpGet:
????????????path:?/healthz
????????????port:?8080
????????????scheme:?HTTP
??????????initialDelaySeconds:?30
??????????timeoutSeconds:?5
????????ports:
????????-?containerPort:?8080
????????resources:
??????????limits:
????????????cpu:?10m
????????????memory:?20Mi
??????????requests:
????????????cpu:?10m
????????????memory:?20Mi
---
apiVersion:?v1
kind:?Service
metadata:
??name:?default-http-backend
??namespace:?kube-system
??labels:
????app.kubernetes.io/name:?default-http-backend
spec:
??ports:
??-?port:?80
????targetPort:?8080
??selector:
????app.kubernetes.io/name:?default-http-backend
EOF

kubectl??apply?-f?deploy.yaml?
kubectl??apply?-f?backend.yaml?


cat?>?ingress-demo-app.yaml?<<?EOF
apiVersion:?apps/v1
kind:?Deployment
metadata:
??name:?hello-server
spec:
??replicas:?2
??selector:
????matchLabels:
??????app:?hello-server
??template:
????metadata:
??????labels:
????????app:?hello-server
????spec:
??????containers:
??????-?name:?hello-server
????????image:?registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/hello-server
????????ports:
????????-?containerPort:?9000
---
apiVersion:?apps/v1
kind:?Deployment
metadata:
??labels:
????app:?nginx-demo
??name:?nginx-demo
spec:
??replicas:?2
??selector:
????matchLabels:
??????app:?nginx-demo
??template:
????metadata:
??????labels:
????????app:?nginx-demo
????spec:
??????containers:
??????-?image:?nginx
????????name:?nginx
---
apiVersion:?v1
kind:?Service
metadata:
??labels:
????app:?nginx-demo
??name:?nginx-demo
spec:
??selector:
????app:?nginx-demo
??ports:
??-?port:?8000
????protocol:?TCP
????targetPort:?80
---
apiVersion:?v1
kind:?Service
metadata:
??labels:
????app:?hello-server
??name:?hello-server
spec:
??selector:
????app:?hello-server
??ports:
??-?port:?8000
????protocol:?TCP
????targetPort:?9000
---
apiVersion:?networking.k8s.io/v1
kind:?Ingress??
metadata:
??name:?ingress-host-bar
spec:
??ingressClassName:?nginx
??rules:
??-?host:?"hello.chenby.cn"
????http:
??????paths:
??????-?pathType:?Prefix
????????path:?"/"
????????backend:
??????????service:
????????????name:?hello-server
????????????port:
??????????????number:?8000
??-?host:?"demo.chenby.cn"
????http:
??????paths:
??????-?pathType:?Prefix
????????path:?"/nginx"??
????????backend:
??????????service:
????????????name:?nginx-demo
????????????port:
??????????????number:?8000
EOF

#?等創(chuàng)建完成后在執(zhí)行:
kubectl??apply?-f?ingress-demo-app.yaml?

kubectl??get?ingress
NAME???????????????CLASS???HOSTS????????????????????????????ADDRESS?????PORTS???AGE
ingress-host-bar???nginx???hello.chenby.cn,demo.chenby.cn???192.168.0.32???80??????7s

14.2過濾查看ingress端口

#?修改為nodeport
kubectl?edit?svc?-n?ingress-nginx???ingress-nginx-controller
type:?NodePort

[root@hello?~/yaml]#?kubectl??get?svc?-A?|?grep?ingress
ingress-nginx??????????ingress-nginx-controller?????????????NodePort????10.104.231.36????<none>????????80:32636/TCP,443:30579/TCP???104s
ingress-nginx??????????ingress-nginx-controller-admission???ClusterIP???10.101.85.88?????<none>????????443/TCP??????????????????????105s
[root@hello?~/yaml]#

15.IPv6測試

#部署應(yīng)用

cat<<EOF?|?kubectl?apply?-f?-
apiVersion:?apps/v1
kind:?Deployment
metadata:
??name:?chenby
spec:
??replicas:?3
??selector:
????matchLabels:
??????app:?chenby
??template:
????metadata:
??????labels:
????????app:?chenby
????spec:
??????containers:
??????-?name:?chenby
????????image:?docker.io/library/nginx
????????resources:
??????????limits:
????????????memory:?"128Mi"
????????????cpu:?"500m"
????????ports:
????????-?containerPort:?80

---
apiVersion:?v1
kind:?Service
metadata:
??name:?chenby
spec:
??ipFamilyPolicy:?PreferDualStack
??ipFamilies:
??-?IPv6
??-?IPv4
??type:?NodePort
??selector:
????app:?chenby
??ports:
??-?port:?80
????targetPort:?80
EOF


#查看端口
[root@k8s-master01?~]#?kubectl??get?svc
NAME???????????TYPE????????CLUSTER-IP???????EXTERNAL-IP???PORT(S)????????AGE
chenby?????????NodePort????fd00::a29c???????<none>????????80:30779/TCP???5s
[root@k8s-master01?~]#?

#使用內(nèi)網(wǎng)訪問
[root@localhost?yaml]#?curl?-I?http://[fd00::a29c]
HTTP/1.1?200?OK
Server:?nginx/1.21.6
Date:?Thu,?05?May?2022?10:20:35?GMT
Content-Type:?text/html
Content-Length:?615
Last-Modified:?Tue,?25?Jan?2022?15:03:52?GMT
Connection:?keep-alive
ETag:?"61f01158-267"
Accept-Ranges:?bytes

[root@localhost?yaml]#?curl?-I?http://192.168.0.31:30779
HTTP/1.1?200?OK
Server:?nginx/1.21.6
Date:?Thu,?05?May?2022?10:20:59?GMT
Content-Type:?text/html
Content-Length:?615
Last-Modified:?Tue,?25?Jan?2022?15:03:52?GMT
Connection:?keep-alive
ETag:?"61f01158-267"
Accept-Ranges:?bytes

[root@localhost?yaml]#?

#使用公網(wǎng)訪問
[root@localhost?yaml]#?curl?-I?http://[2409:8a10:9e18:9020::10]:30779
HTTP/1.1?200?OK
Server:?nginx/1.21.6
Date:?Thu,?05?May?2022?10:20:54?GMT
Content-Type:?text/html
Content-Length:?615
Last-Modified:?Tue,?25?Jan?2022?15:03:52?GMT
Connection:?keep-alive
ETag:?"61f01158-267"
Accept-Ranges:?bytes

16.安裝命令行自動補全功能

yum?install?bash-completion?-y
source?/usr/share/bash-completion/bash_completion
source?<(kubectl?completion?bash)
echo?"source?<(kubectl?completion?bash)"?>>?~/.bashrc

關(guān)于

https://www.oiox.cn/

https://www.oiox.cn/index.php/start-page.html

CSDN、GitHub、知乎、開源中國、思否、掘金、簡書、華為云、阿里云、騰訊云、嗶哩嗶哩、今日頭條、新浪微博、個人博客

全網(wǎng)可搜《小陳運維》

文章主要發(fā)布于微信公眾號:《Linux運維交流社區(qū)》文章來源地址http://www.zghlxwxcb.cn/news/detail-751324.html

到了這里,關(guān)于?二進制安裝Kubernetes(k8s)v1.28.0的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 二進制安裝Kubernetes(k8s) v1.27.1 IPv4/IPv6雙棧 可脫離互聯(lián)網(wǎng)

    https://github.com/cby-chen/Kubernetes 開源不易,幫忙點個star,謝謝了 kubernetes(k8s)二進制高可用安裝部署,支持IPv4+IPv6雙棧。 我使用IPV6的目的是在公網(wǎng)進行訪問,所以我配置了IPV6靜態(tài)地址。 若您沒有IPV6環(huán)境,或者不想使用IPv6,不對主機進行配置IPv6地址即可。 不配置IPV6,不影

    2024年02月06日
    瀏覽(36)
  • k8s v1.27.4二進制部署記錄

    k8s v1.27.4二進制部署記錄

    記錄二進制部署過程 CPU不足,有兩個節(jié)點calico沒起來

    2024年02月12日
    瀏覽(48)
  • 二進制部署高可用k8s集群V1.20.11版本

    二進制部署高可用k8s集群V1.20.11版本

    單master架構(gòu)圖 master節(jié)點 node1節(jié)點 node2節(jié)點 ??Etcd是一個分布式鍵值存儲系統(tǒng), K8s使用Etcd進行數(shù)據(jù)存儲 ,所以先準備一個Etcd數(shù)據(jù)庫,為解決Etcd單點故障,應(yīng)采用集群方式進行部署,這里使用3臺組件集群,可容忍1臺機器故障,當然 也可以使用5臺組件集群,可容忍2臺機器故

    2024年01月22日
    瀏覽(30)
  • [kubernetes]二進制部署k8s集群-基于containerd

    k8s從1.24版本開始不再直接支持docker,但可以自行調(diào)整相關(guān)配置,實現(xiàn)1.24版本后的k8s還能調(diào)用docker。其實docker自身也是調(diào)用containerd,與其k8s通過docker再調(diào)用containerd,不如k8s直接調(diào)用containerd,以減少性能損耗。 除了containerd,比較流行的容器運行時還有podman,但是podman官方安裝

    2024年02月12日
    瀏覽(30)
  • 二進制搭建 Kubernetes與k8s集群搭建(一)

    二進制搭建 Kubernetes與k8s集群搭建(一)

    目錄 二進制搭建 Kubernetes v1.20 ? ? 操作系統(tǒng)初始化配置 部署 docker引擎 部署 etcd 集群 準備簽發(fā)證書環(huán)境 在 master01 節(jié)點上操作 ? ?? 生成Etcd證書 在 node01 節(jié)點上操作 在 node02 節(jié)點上操作 部署 Master 組件 在 master01 節(jié)點上操作 部署 Worker Node 組件 在所有 node 節(jié)點上操作 在 mas

    2024年02月06日
    瀏覽(25)
  • 云原生Kubernetes:二進制部署K8S單Master架構(gòu)(二)

    云原生Kubernetes:二進制部署K8S單Master架構(gòu)(二)

    目錄 ?一、理論 1.K8S單Master架構(gòu) 2.部署 master 組件 3.部署 Woker Node 組件 4.在master1節(jié)點上操作 5.在 node01 節(jié)點上操作 6.在 master01 節(jié)點上操作? 7.在 node01 節(jié)點上操作 8.node02 節(jié)點部署(方法一) 二、實驗 1.環(huán)境 ?2.部署 master 組件 3.部署 Woker Node 組件 4.在master1節(jié)點上操作 5.在 nod

    2024年02月10日
    瀏覽(97)
  • 云原生Kubernetes:二進制部署K8S單Master架構(gòu)(一)

    云原生Kubernetes:二進制部署K8S單Master架構(gòu)(一)

    目錄 一、理論 1.K8S單Master架構(gòu) 2.??etcd 集群 3.CNI 4.Flannel網(wǎng)絡(luò) 5.K8S單Master架構(gòu)環(huán)境部署 6.部署 etcd 集群 7.部署 docker 引擎 8.flannel網(wǎng)絡(luò)配置 二、實驗 1.二進制部署K8S單Master架構(gòu) 2.?環(huán)境部署 3.部署 etcd 集群 4.部署 docker 引擎 5.flannel網(wǎng)絡(luò)配置 三、問題 1.etcd 報錯 2.安裝etcd問題 3.系

    2024年02月10日
    瀏覽(89)
  • 二進制安裝K8S

    二進制安裝K8S

    健康檢查etcdctl -C http://10.0.0.11:2379 cluster-health

    2024年02月07日
    瀏覽(54)
  • 【K8S】二進制安裝

    【K8S】二進制安裝

    常見的K8S安裝部署方式 ●Minikube Minikube是一個工具,可以在本地快速運行一個單節(jié)點微型K8S,僅用于學習、預覽K8S的一些特性使用。 部署地址:https://kubernetes.io/docs/setup/minikube ●Kubeadm ☆ Kubeadm也是一個工具,提供kubeadm init和kubeadm join,用于快速部署K8S集群,相對簡單。 htt

    2024年02月06日
    瀏覽(50)
  • k8s 1.28版本二進制安裝

    k8s 1.28版本二進制安裝

    ??二進制安裝比較復雜,但是也比較穩(wěn)定,適用于線上環(huán)境使用。 ??本筆記參考自:https://github.com/cby-chen/Kubernetes ,針對文中內(nèi)容,有部分鏡像無法拉取等,還有一部分有點小問題,自己有做一些小的提示、修改。建議參考本文安裝即可。 kubernetes(k8s)二進制高可用安

    2024年02月04日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包