? ?繼上篇通過vagrant與virtualBox實現虛擬機的安裝。筆者已經將原有的vmware版本的虛擬機卸載掉了。這個場景下,需要重新安裝k8s? 相關組件。由于之前寫的一篇文章本身也沒有截圖。只有命令。所以趁著現在。寫一篇,完整版帶截圖的步驟。現在行業這么卷。離職了讓我能好好的寫點東西。
描述:此篇文章只有具體的步驟,組件內部核心控件。以及具體使用方式。并不包含在這篇內容中。如果有需要。小伙伴兒們可以提出來。作為持續的內容更新也是不錯的。好了不喜歡看嘮叨的同學們。咱們直接開始。上述純屬無聊的廢話。
版本:V1.28.9 版本
部署方式:Kubeadm 【單master 多node部署】
下方?master節點 和node節點? 都要進行配置 。
? (1) 升級linux內核,由于低版本linux內核有可能引發一些不確定因素 所以筆者在此升級了下linux內核
#查詢當前linux內核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg# 步驟依次執行即可
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgyum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpmyum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64grub2-set-default 0grub2-mkconfig -o /boot/grub2/grub.cfg#重新啟動
reboot #啟動后 重新查詢linux內核是否變更
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
(2)關閉防火墻狀態。
#停止當前防火墻
systemctl stop firewalld# 重啟后也關閉防火墻 避免自動重啟
systemctl disable firewalld #檢查當前防火墻狀態
systemctl status firewalld
(3)關閉掉swap分區
#關閉當前swap分區
sed -i 's/.*swap.*/#&/' /etc/fstab
swapoff -a
(4)關閉掉 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
(5)添加host? 請修改成自己的maste節點IP和workNode節點IP
echo "192.168.18.219 master \
192.168.18.220 node01
192.168.18.221 node02" >> /etc/hosts
(6)添加hostname 同時讓hostname 生效
#替換成自己的主機名稱 也可以按照上述內容 master node01 node02 配置
hostnamectl set-hostname 主機名稱# 查詢當前hostname
hostname#使hstname生效
systemctl restart NetworkManager
(7)安裝時間同步插件 保證三臺機器時鐘都是同步的
yum install chrony -y
systemctl start chronyd && systemctl enable chronyd && chronyc sources
date
(8)添加路由轉發
# 內核路由轉發 以及網橋過濾
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
(9)使路由轉發生效
sysctl --system
(10)? 安裝ipset
# 安裝ipset
yum -y install ipset ipvsadm
(11)? 加載ipvs
# 加載
cat > /etc/sysconfig/modules/ipvs.modules << EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
(12) 給ipvs 賦予權限
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
(13)安裝docker 請直接按照步驟來
#如果 之前安裝過docker 可以按照此步驟先進行卸載操作 如果首次安裝 不需要第一步
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine#安裝 yum-utils
yum install -y yum-utilsyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#上述如果地址添加失敗可以通過下述地址下載
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin#查看當前docker 版本
docker -v#開機自啟動 docker
systemctl enable docker.service
systemctl enable containerd.service#啟動 docker
systemctl start docker && systemctl status docker
(14)? 添加docker? 鏡像地址
cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"http://hub-mirror.c.163.com"
]
}
EOF
(15) 安裝wget 為了安裝 cri-docker cri-docker 因為k8s新版本是基于container.io實現的 所以需要
下載 cri-docker ,請注意 下述命令中的 $MAINPID? 執行過程中有可能會丟失。 請手動 補充到位置
#安裝wget 為了下載cri-docker 由于k8s 新版本是基于 container.io 所以可以通過cri-docker 適#配
yum install wget #下載 cri-docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz#解壓當前 tar包 默認下載當前目錄
tar xf cri-dockerd-0.3.8.amd64.tgz#將解壓內容 移動到 /usr/bin
mv cri-dockerd/cri-dockerd /usr/bin/#創建cri-docker.service 文件
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 --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://
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#上述中的 $MAINPID 有可能會丟失 如果丟失 請執行如下代碼 添加上 $MAINPID
vim /usr/lib/systemd/system/cri-docker.service
(16) 添加cri-docker.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
(17)? 修改了 systemd 的相關配置 所以需要讓其生效
# 對cri-docker 的配置讓其生效
systemctl daemon-reload #開機自啟動 啟動cri-docker 同時查看狀態
systemctl enable cri-docker && systemctl start cri-docker && systemctl status cri-docker
(18)? 添加k8s鏡像地址
# 添加k8s鏡像源地址
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
(19) 前期準備工作已經做好 那么 安裝 kubeadm? ?kubelet? ?kubectl 同時啟動kubelet 設置開機自啟動 同時查看狀態? 現在的kubelet還是啟動失敗的? 請不要慌張?
#安裝 kuebadm kubelet kubectl
yum install -y kubelet kubeadm kubectl#啟動kubelet 并設置開機自啟動
systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet
(20)? 配置cgroup? 和docker 保持一致
# 配置 cgroup 驅動與docker一致
cp /etc/sysconfig/kubelet{,.bak}cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF#安裝自動補全 工具
yum install -y bash-completion
(21) 用戶bash目錄? 添加kubectl 變量
source /usr/share/bash-completion/bash_completionecho "source <(kubectl completion bash)" >> ~/.bashrcsource ~/.bashrc
(22) 查看 kubeadm 鏡像
查看鏡像倉庫是否有相關鏡像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
(23)拉取相關鏡像????????????????
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock
?上述為 master節點 和node節點? 都要進行配置 下述? 將分開說明 master? 和? node 的配置
下方配置請注意? 一部分是master 需要配置的? 一部分是node需要配置的
Master配置
# master節點運行 啟動master節點相關組件及容器【master】
kubeadm init \
--apiserver-advertise-address 192.168.31.219 \
--kubernetes-version v1.28.11 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all#上述配置中的
api-server-address 代表的是主節點的ip地址
kubernetes-version 代表的是k8s組件版本
pod-network-cidr 代表內部的區分流量
image-repository 鏡像倉庫地址
cri-socket 指定cri-docker的 地址
(master)上述執行成功后 會提示執行相關命令
# 創建kubeconfig master啟動完成后也會提示此命令【master】
mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config
(master) 創建自有證書 生成內容 在node節點是有用的? 請一定要記住 下方已經標注出來了,一個是token? 一個是生成的 有效的sha256的值
# 創建相關kubeadm token 【master】生成的值 在node節點中是需要的請記住
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'# 使用我們自己生成的證書 在子節點進行join時需要token 以及sha【masert】
kubeadm token create --ttl 0 --print-join-command# 查看是否已經創建成功證書 在node節點join要用到 【master】
master? 下載網絡插件? 還記著前邊筆者說過的 kubelet還沒起來的問題嗎 ,當把cin插件下載完成后 kubelet就會恢復正常
修改相關配置 calico.yml文件中相關配置CALICO_IPV4POOL_CIDR 改成admin init中 ?--pod-network-cidr 參數相同,但是由于現在的dokerhub無法下載鏡像,通過阿里云下載相關鏡像還無法找到對應的版本的網絡代理插件。那么筆者喜歡讓大家白嫖。壓縮包會同步出來。這樣你們就不用科學上網去自己尋找了。如果按照筆者的配置就不需要修改上述的CALICO_IPV4POOL_CIDR。
請將所有tar? 包? 執行? docker load? ?添加到master? 鏡像中? 然后? ?通過kubectl? 執行
wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yam# 如果下載失敗 請把使用筆者給的安裝包的內容
kubectl apply -f calico.yamll
Node節點
將node節點添加到 master中去
#在node節點執行 加入到主節點
kubeadm join 192.168.31.219:6443 --token juw32i.1cb4jrcr4fm8scvy --discovery-token-ca-cert-hash sha256:5be9defe9be83e5b50b51490009b8bb8a22a7bf9b9d71c6176cca81581d98fba --cri-socket=unix:///var/run/cri-dockerd.sock#解釋
token 是在主節點生成的 上述標黃的內容
sha256: 自己生成的值 也在上述標黃的內容中
最終? 可以在master? 查看? ?節點狀態? 如果顯示ready 那么就是正常啟動的