二進制安裝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)可搜《小陳運維》文章來源:http://www.zghlxwxcb.cn/news/detail-751324.html
文章主要發(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)!