天天看點

k8s+Docker部署方法

作者:Java小熊

前言

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
k8s+Docker部署方法

環境配置的小tips

如果你也想隻用虛拟機玩玩,那麼我們可以去官網或一些學校鏡像站下載下傳iso檔案來安裝

指路!

  1. wiki.centos.org/Download 官網的曆史版本網頁,提供iso下載下傳
  2. 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
           
k8s+Docker部署方法

為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
           
k8s+Docker部署方法

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+Docker部署方法

k8s配置及安裝

安裝前配置

以下配置需要在主節點和所有從節點執行!\color{red}\textbf {以下配置需要在主節點和所有從節點執行!}以下配置需要在主節點和所有從節點執行!

安裝前的配置主要需要實作如下幾件事:

  1. 關閉防火牆,設定網絡允許接收任意來源的請求
  2. 關閉selinux,關閉swap,并設定開機自動關閉
  3. 在hosts檔案配置主從節點ip
  4. 配置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+Docker部署方法

網絡插件安裝

這一步很重要,不安裝網絡插件的話k8s預設是無法跟從節點通信的。我選擇的産品是calico。

首先進入calico官方文檔檢視calico支援的k8s版本。我檢視的是calico 3.23,對應的軟體要求可以在calico v3.23 System Reauirements裡檢視到。

k8s+Docker部署方法

輸入如下指令部署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
           
k8s+Docker部署方法

新的從節點如何加入叢集

假如我們未來建立了新的虛拟機,如何加入已經啟動了的叢集呢?

在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