kubernetes系列—Ubuntu下搭建Kubernetes集群--k8s部署


1、kubernetes安裝介紹

1.1 K8S架構圖

 

1.2 K8S搭建安裝示意圖

2、安裝kubernetes

2.1  關閉防火牆

在每台機器上關閉防火牆:

① 關閉服務,並設為開機不自啟

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
或者
$ sudo ufw disable

② 清空防火牆規則

$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
$ sudo iptables -P FORWARD ACCEPT

2.2 關閉 swap 分區

如果開啟了 swap 分區,kubelet 會啟動失敗(可以通過將參數 --fail-swap-on 設置為false 來忽略 swap on),故需要在每台機器上關閉 swap 分區:

# 臨時關閉
swapoff -a

# 編輯/etc/fstab,注釋掉包含swap的那一行即可,重啟后可永久關閉

2.3 配置阿里源

sudo echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list

然后更新下:

sudo apt update

如果遇到以下問題:

 

 

 可以記下提示的PUBKEY的最后8位,這里是BA07F4FB,然后執行:

gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update

2.4. 安裝組件

sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl #確保不會被自動更新

2.5 配置kubelet的cgroup drive

需要確保kubelet的cgroup drive在docker的一致。
分別可以通過以下命令查看:

docker info | grep -i cgroup

cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

若顯示不一樣,則添加或修改Environment="KUBELET_CGROUP_ARGS=--cgroup-dirver=cgroupfs"

systemctl daemon-reload
systemctl restart kubelet

2.6. 啟動kubelet

systemctl enable kubelet && systemctl start kubelet

2.7. 下載K8S的Docker鏡像

/etc/apt/sources.list中添加阿里源:

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
 
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
 
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
 
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe

sudo apt update更新下源。

首先使用kubeadm config images list顯示我們需要下載的鏡像。

然后從mirrorgooglecontainers上把這些鏡像都拉下來,以免在初始化的時候從k8s.gcr.io拉取:

試過部分國內鏡像源沒有v1.18.3鏡像,從https://hub.docker.com//mirrorgcrio/xxx 拉取k8s.gcr.io對應的鏡像有效

# docker pull鏡像拉取命令
docker pull mirrorgcrio/kube-apiserver:v1.18.3
docker pull mirrorgcrio/kube-controller-manager:v1.18.3
docker pull mirrorgcrio/kube-scheduler:v1.18.3
docker pull mirrorgcrio/kube-proxy:v1.18.3
docker pull mirrorgcrio/pause:3.2
docker pull mirrorgcrio/etcd:3.4.3-0
docker pull mirrorgcrio/coredns:1.6.7


# docker tag鏡像重命名
docker tag mirrorgcrio/kube-apiserver:v1.18.3 k8s.gcr.io/kube-apiserver:v1.18.3
docker tag mirrorgcrio/kube-controller-manager:v1.18.3 k8s.gcr.io/kube-controller-manager:v1.18.3
docker tag mirrorgcrio/kube-scheduler:v1.18.3 k8s.gcr.io/kube-scheduler:v1.18.3
docker tag mirrorgcrio/kube-proxy:v1.18.3 k8s.gcr.io/kube-proxy:v1.18.3
docker tag mirrorgcrio/pause:3.2 k8s.gcr.io/pause:3.2
docker tag mirrorgcrio/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag mirrorgcrio/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

# docker image rm命令刪除原始鏡像
docker image rm mirrorgcrio/kube-apiserver:v1.18.3
docker image rm mirrorgcrio/kube-controller-manager:v1.18.3
docker image rm mirrorgcrio/kube-scheduler:v1.18.3
docker image rm mirrorgcrio/kube-proxy:v1.18.3
docker image rm mirrorgcrio/pause:3.2
docker image rm mirrorgcrio/etcd:3.4.3-0
docker image rm mirrorgcrio/coredns:1.6.7

注意,至此基礎的組件都安裝完成,接下來要根據是master節點還是普通node節點來分別配置。

2.8 master節點配置

(1)在master節點上運行:

kubeadm init --pod-network-cidr=172.0.0.0/16 --kubernetes-version=v1.18.3 --service-cidr=172.17.0.0/16 --ignore-preflight-errors=Swap --apiserver-advertise-address=172.17.0.2

注釋:

  •  --kubernetes-version=v1.18.3:指定K8S版本,必須和前面導入的鏡像一致
  •  --pod-network-cidr=171.0.0.0/16:表示集群將使用網絡的子網范圍; 
  •  --service-cidr:指定service網段
  •  --ignore-preflight-errors=Swap/all:忽略 swap/所有 報錯
  • --apiserver-advertise-address:表示綁定的網卡IP

若執行kubeadm init出錯或強制終止,則再需要執行該命令時,需要先執行kubeadm reset重置。

(2)初始化命令成功后,創建.kube目錄

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

 (3)此外最后還會提示其他節點加入集群時的命令:

kubeadm join 172.17.0.2:6443 --token zuhiop.bmxq2jofv1j68o9o --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb

需要注意的是這里的token值24小時后會失效,因此,當以后還想加入節點時,可以先用kubeadm token list命令查看當前的token表,並在master節點上執行

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'    # 來查看hash。

查看網絡狀態kubectl get pod -n kube-system,可以發現都處於Pending阻塞狀態,此時,我們需要配置網絡,直接使用Calico,即執行:

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

(注意這里也是有版本號的,如果不是很清楚是多少,可以直接訪問官網獲取最新的進行嘗試:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)

過段時間,再執行kubectl get pod -n kube-system就會發現都處於running狀態了。

最后將master設為工作節點:

kubectl taint nodes --all node-role.kubernetes.io/master-

執行成功時會顯示

node/xl-virtualbox untainted

對於mater至此配置成功,可以使用kubectl get nodes命令查看節點狀態。當然目前只有一個master節點。

2.9 master節點驗證

(1)拉取了必須的鏡像

(2)開啟了kube-apiserver 的6443端口

[root@master ~]# ss -nutlp
tcp   LISTEN     0      128                   :::6443                              :::*                   users:(("kube-apiserver",pid=1609,fd=3))

(3)使用kubectl命令查詢集群信息

 查詢組件狀態信息

[root@master ~]# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health": "true"}

查詢集群節點信息(因為還沒有部署好flannel,所以節點顯示為NotReady)

[root@master ~]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    NotReady  master    13m       v1.18.3

查詢名稱空間,默認

[root@master ~]# kubectl get ns
NAME            STATUS    AGE
default         Active    13m
kube-public     Active    13m
kube-system     Active    13m

3.0 部署網絡插件flannel

(1)直接使用kubectl 執行gitlab上的flannel 部署文件

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

(2)會看到下載好的flannel 的鏡像

[root@master ~]# docker image ls |grep flannel
quay.io/coreos/flannel                              v0.10.0-amd64       f0fad859c909        12 months ago       44.6 MB
quay.io/coreos/flannel                              v0.9.1              2b736d06ca4c        14 months ago       51.3 MB

(3)驗證

① master 節點已經Ready

[root@master ~]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    14m       v1.18.3

② 查詢kube-system名稱空間下

[root@master ~]# kubectl get pods -n kube-system(指定名稱空間) |grep flannel
NAME                             READY     STATUS    RESTARTS   AGE
kube-flannel-ds-amd64-4wck2      1/1       Running   0          1m

3、初始化kubernetes node節點

3.1 使用kubeadm join 初始化

初始化node節點;下邊的命令是master初始化完成后,下邊有提示的操作命令

kubeadm join 172.17.0.2:6443 --token zuhiop.bmxq2jofv1j68o9o --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb --ignore-preflight-errors=Swap

如果此時在master節點上使用kubectl get nodes查看節點的狀態時'NotReady',請在對應主機上重啟docker服務即可:

systemctl restart docker

3.2 驗證集群是否初始化成功

 

 

注意:
為了每台節點顯示名稱不一樣,最好是給每個節點設置不同的hostname,可以通過以下命令修改:

hostnamectl set-hostname new-name

文章參考:http://www.cnblogs.com/along21/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM