前言
k8s宣布棄用Docker?到底棄用了什麼
時間 | 事件 |
2020 | k8s在v1.20版本釋出時宣布将在未來棄用對Dockershim的支援 |
2022 | k8s釋出v1.24版本,正式剔除Dockershim |
首先,并不是棄用Docker容器,想要部署k8s和Docker容器環境的小夥伴完全不用擔心!Docker鏡像容器依然可以正常被調用,唯一的差別就是最新版k8s會繞過Docker直接調用其内部的containerd
本文使用的部署環境
至少一個master,2個slave。你可以用虛拟機搞,也可以花錢買伺服器,反正至少啟三個來用。
環境參數 | 值 | 描述 |
部署方式 | 多虛拟機 | 窮,我是學生,伺服器什麼的,不可能 |
作業系統 | CentOS 7 | 外置Win10,内置CentOS 7 |
CPU | 2個1核 | 每個虛拟機節點必須2個邏輯CPU起步,不然k8s部署不了 |
記憶體 | 4G | 真的4G起步,每台虛拟機2G隻能保證将就運作 k8s+Docker,跑不了别的服務 |
存儲 | 20G | 大點也行,其實如果還要部署Python等環境的話建議40G |
環境配置的小tips
如果你也想隻用虛拟機玩玩,那麼我們可以去官網或一些學校鏡像站下載下傳iso檔案來安裝
指路!
- wiki.centos.org/Download 官網的曆史版本網頁,提供iso下載下傳
- mirrors.bupt.edu.cn/centos/7/is… 打個廣告,北京郵電大學鏡像站的centos 7
本文使用的版本号
軟體 | 版本号 |
Kubernetes(k8s) | 1.23.0 |
Docker | 20.10.0.3 |
Docker安裝及配置
以下配置需要在主節點和所有從節點執行!\color{red}\textbf {以下配置需要在主節點和所有從節點執行!}以下配置需要在主節點和所有從節點執行!
配置倉庫
這一步是為了拉取docker時速度快點,用的是阿裡雲的centOS 7源。
需要注意的是,Docker版本務必和k8s支援的版本對應一下。本文用的是k8s 1.23.0,安裝的時候如果Docker不是20以下的會報警告(雖然可能沒什麼事不用管,但還是選好版本再說吧)
我們輸入如下指令,來配置阿裡雲yum倉庫,并使其生效:
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum alean all
yum makecache
為linux安裝指定版本docker
我們可以使用如下指令檢視我們的yum倉庫有什麼docker可裝。我選擇的是20.10.0.3這個版本。
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-20.10.0-3.el7
docker配置
我們首先啟動Docker:
systemctl start docker
這時/etc/docker會自動生成。我們需要進行一些自定義配置,設定阿裡雲源并且修改docker管理系統cgroup的方式為systemd(和k8s一緻才能正常安裝啟動k8s)
vi /etc/docker/daemon.json
########## 以下是檔案内的具體内容 ###########
{
"registry-mirrors": ["<這裡,各位可以自行注冊登入阿裡雲容器鏡像服務,獲得加速源鏡像url>"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
########## 随後我們重新開機docker ###########
systemctl restart docker
這裡附上阿裡雲鏡像服務網址:cr.console.aliyun.com/cn-hangzhou…
k8s配置及安裝
安裝前配置
以下配置需要在主節點和所有從節點執行!\color{red}\textbf {以下配置需要在主節點和所有從節點執行!}以下配置需要在主節點和所有從節點執行!
安裝前的配置主要需要實作如下幾件事:
- 關閉防火牆,設定網絡允許接收任意來源的請求
- 關閉selinux,關閉swap,并設定開機自動關閉
- 在hosts檔案配置主從節點ip
- 配置k8s的路由設定、鏡像源
我們依次輸入如下代碼(具體多少個從節點視各位具體情況而定):
點選 展開/收起 代碼塊
iptables -P FORWARD ACCEPT
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalld
cat >>/etc/hosts<<EOF
<你的主節點ip> k8s-master
<你的從節點ip1> k8s-slave1
<你的從節點ip2> k8s-slave2
<你的從節點ip3> k8s-slave3
<你的從節點ip4> k8s-slave4
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安裝k8s
版本視情況而定。我選擇k8s v1.23.0:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
主節點配置
以下操作隻在主節點進行!\color{red}\textbf {以下操作隻在主節點進行!}以下操作隻在主節點進行!
利用kubeadm生成預設配置的yaml檔案,并且需要改一下。我們首先把預設配置生成出來:
kubeadm config print init-defaults > kubeadm.yaml
随後,分别進行如下改動
######### :11,修改 #########
localAPIEndpoint:
advertiseAddress: <這裡換成master的位址>
######### :30,修改 #########
imageRepository: registry.aliyuncs.com/google_containers
######### :33,新增podSubnet這一行 #########
networking:
podSubnet: 10.244.0.0/16
主節點啟動
kubeadm image pull --config kubeadm.yaml
kubeadm init --config kubeadm.yaml
我記錄了當時啟動完後的結果,這裡最後兩行告知了如何讓從節點加入叢集,我們隻需要将這個輸入到從節點那就行:
網絡插件安裝
這一步很重要,不安裝網絡插件的話k8s預設是無法跟從節點通信的。我選擇的産品是calico。
首先進入calico官方文檔檢視calico支援的k8s版本。我檢視的是calico 3.23,對應的軟體要求可以在calico v3.23 System Reauirements裡檢視到。
輸入如下指令部署calico:
wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificate
kubectl apply -f calico.yaml
# 檢視以下部署情況,一般運作calico後要過一會兒,會發現所有節點都将處于Ready狀态,現在可以正常進行叢集的通信了!
kubectl get pod -n kube-system | grep calico
kubectl get nodes
新的從節點如何加入叢集
假如我們未來建立了新的虛拟機,如何加入已經啟動了的叢集呢?
在master節點輸入如下指令,将得到的結果輸入新的從節點即可:
kubeadm token create --print-join-command
如何關閉并驅逐從節點
這個其實嚴格執行的話挺麻煩的,以slave1為例,我們需要依次輸入如下指令:
# 把slave1的資源驅趕到其他節點
kubectl drain k8s-slave1 --ignore-daemonsets
# 标記slave1為不可排程
kubectl uncordon k8s-slave1
# 從叢集删除slave1
kubectl delete node k8s-slave1
主節點如何停止
kubectl drain node --ignore-daemonsets --delete-local-data --force
主節點如何删除服務?
比如我們部署了一個test-nginx服務,但是想把它删了,釋放其容器資源
kubectl get pods | grep test-nginx | awk '{print $1}' | xargs kubectl delete pod
連結:https://juejin.cn/post/7231448641976696889