K8S脈絡整理(004)-K8S-Cluster部署


官方安裝文檔可以參考 https://kubernetes.io/docs/setup/independent/install-kubeadm/.

使用Kubespray在ubuntu上自動部署K8s1.9.0集群:http://www.cnblogs.com/DaweiJ/p/8462848.html

CloudMan的blog:http://www.cnblogs.com/CloudMan6/p/8269620.html


 

使用kubespary自動部署概要步驟:

若可FQ翻牆,可直接下載gcr.io/google_containers/相關鏡像25個。

不翻牆部署步驟詳見:http://www.cnblogs.com/DaweiJ/p/8462848.html

概要如下

1、安裝最新ansible

2、下載kubespary

3、安裝docker及其他依賴包

4、下載鏡像

5、修改ansible相關配置,inventory文件

6、安裝

ansible-playbook -i inventory/inventory.cfg cluster.yml

7、troubles shooting

8、集群擴展

 


 

一般部署概要步驟:

一、Master安裝

1、安裝 Docker

  所有節點都需要安裝 Docker。

  apt-get update && apt-get install docker.io

2、安裝 kubelet、kubeadm 和 kubectl

在所有節點上安裝 kubelet、kubeadm 和 kubectl。

kubelet 運行在 Cluster 所有節點上,負責啟動 Pod 和容器。

kubeadm 用於初始化 Cluster。

kubectl 是 Kubernetes 命令行工具。通過 kubectl 可以部署和管理應用,查看各種資源,創建、刪除和更新各種組件。

apt-get update && apt-get install -y apt-transport-httpscurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -cat <<EOF >/etc/apt/sources.list.d/kubernetes.listdeb http://apt.kubernetes.io/ kubernetes-xenial mainEOFapt-get updateapt-get install -y kubelet kubeadm kubectl

  用 kubeadm 創建 Cluster

  完整的官方文檔可以參考 https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

  初始化 Master

  在 Master 上執行如下命令:

  kubeadm init --apiserver-advertise-address 192.168.56.105 --pod-network-cidr=10.244.0.0/16

  --apiserver-advertise-address 指明用 Master 的哪個 interface 與 Cluster 的其他節點通信。如果 Master 有多個 interface,建議明確指定,如果不指定,kubeadm 會自動選擇有默認網關的 interface。

  --pod-network-cidr 指定 Pod 網絡的范圍。Kubernetes 支持多種網絡方案,而且不同網絡方案對 --pod-network-cidr 有自己的要求,這里設置為 10.244.0.0/16 是因為我們將使用 flannel 網絡方案,必須設置成這個  CIDR。在后面的實踐中我們會切換到其他網絡方案,比如 Canal。

初始化過程簡要如下:

① kubeadm 執行初始化前的檢查。

② 生成 token 和證書。

③ 生成 KubeConfig 文件,kubelet 需要這個文件與 Master 通信。

④ 安裝 Master 組件,會從 goolge 的 Registry 下載組件的 Docker 鏡像,這一步可能會花一些時間,主要取決於網絡質量。

⑤ 安裝附加組件 kube-proxy 和 kube-dns。

⑥ Kubernetes Master 初始化成功。

⑦ 提示如何配置 kubectl,后面會實踐。

⑧ 提示如何安裝 Pod 網絡,后面會實踐。

⑨ 提示如何注冊其他節點到 Cluster,后面會實踐。

配置 kubectl

kubectl 是管理 Kubernetes Cluster 的命令行工具,前面我們已經在所有的節點安裝了 kubectl。Master 初始化完成后需要做一些配置工作,然后 kubectl 就能使用了。

依照 kubeadm init 輸出的第 ⑦ 步提示,推薦用 Linux 普通用戶執行 kubectl(root 會有一些問題)

我們為 daweij 用戶配置 kubectl:  ubuntu用戶默認不創建HOME,參考:http://www.cnblogs.com/DaweiJ/p/8522092.html

useradd -r -m -s /bin/bash daweij

passwd daweij

chmod 770 /etc/sudoers
vim /etc/sudoers
然后添加:
daweij ALL=(ALL:ALL) ALL

chmod 440 /etc/sudoers

 

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

  

為了使用更便捷,啟用 kubectl 命令的自動補全功能。

echo "source <(kubectl completion bash)" >> ~/.bashrc

這樣 ubuntu 用戶就可以使用 kubectl 了。

安裝 Pod 網絡

要讓 Kubernetes Cluster 能夠工作,必須安裝 Pod 網絡,否則 Pod 之間無法通信。

Kubernetes 支持多種網絡方案,這里我們先使用 flannel,后面還會討論 Canal。

執行如下命令部署 flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

二、Node安裝

添加 k8s-node1 和 k8s-node2

在 k8s-node1 和 k8s-node2 上分別執行如下命令,將其注冊到 Cluster 中:

kubeadm join --token d38a01.13653e584ccc1980 192.168.56.105:6443

這里的 --token 來自前面 kubeadm init 輸出的第 ⑨ 步提示,如果當時沒有記錄下來可以通過 kubeadm token list 查看。

根據提示,我們可以通過 kubectl get nodes 查看節點的狀態。

kubectl get nodes
NAME      STATUS    ROLES         AGE       VERSION
master    Ready     master        33d       v1.9.0+coreos.0
node1     Ready     node          33d       v1.9.0+coreos.0
node2     Ready     node          33d       v1.9.0+coreos.0
node3     Ready     node          33d       v1.9.0+coreos.0
node4     Ready     master,node   33d       v1.9.0+coreos.0

  

目前所有節點都是 NotReady,這是因為每個節點都需要啟動若干組件,這些組件都是在 Pod 中運行,需要首先從 google 下載鏡像,我們可以通過如下命令查看 Pod 的狀態:

kubectl get pod --all-namespaces

root@master:~/kubespray# kubectl get pod --all-namespaces
NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE
default       kubernetes-bootcamp-5d7f968ccb-c57nw    1/1       Running   0          2h
default       kubernetes-bootcamp-5d7f968ccb-lv24f    1/1       Running   0          2h
kube-system   calico-node-4gm72                       1/1       Running   52         33d
kube-system   calico-node-8fkfk                       1/1       Running   0          33d
kube-system   calico-node-fqdwj                       1/1       Running   53         33d
kube-system   calico-node-lpdtx                       1/1       Running   47         33d
kube-system   calico-node-nq8l2                       1/1       Running   42         33d
kube-system   kube-apiserver-master                   1/1       Running   0          33d
kube-system   kube-apiserver-node4                    1/1       Running   224        18d
kube-system   kube-controller-manager-master          1/1       Running   0          33d
kube-system   kube-controller-manager-node4           1/1       Running   5          18d
kube-system   kube-dns-79d99cdcd5-6vvrw               3/3       Running   0          18d
kube-system   kube-dns-79d99cdcd5-rkpf2               3/3       Running   0          18d
kube-system   kube-proxy-master                       1/1       Running   0          33d
kube-system   kube-proxy-node1                        1/1       Running   0          32d
kube-system   kube-proxy-node2                        1/1       Running   0          18d
kube-system   kube-proxy-node3                        1/1       Running   0          32d
kube-system   kube-proxy-node4                        1/1       Running   0          18d
kube-system   kube-scheduler-master                   1/1       Running   0          33d
kube-system   kube-scheduler-node4                    1/1       Running   3          18d
kube-system   kubedns-autoscaler-5564b5585f-7z62x     1/1       Running   0          18d
kube-system   kubernetes-dashboard-6bbb86ffc4-zmmc2   1/1       Running   0          18d
kube-system   nginx-proxy-node1                       1/1       Running   0          32d
kube-system   nginx-proxy-node2                       1/1       Running   0          18d
kube-system   nginx-proxy-node3                       1/1       Running   0          32d

  

PendingContainerCreatingImagePullBackOff 都表明 Pod 沒有就緒,Running 才是就緒狀態。我們可以通過 kubectl describe pod <Pod Name> 查看 Pod 具體情況,比如:

kubectl describe pod calico-node-4gm72 --namespace=kube-system

所有的節點都已經 Ready后,Kubernetes Cluster 創建成功,一切准備就緒。


免責聲明!

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



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