一次K8S搭建集群成功記錄

參考借鑑

1.ubuntu安裝及卸載程序

https://blog.csdn.net/xietansheng/article/details/80044644

2.docker安裝指定版本

https://blog.csdn.net/cdbdqn001/article/details/88183777

https://blog.csdn.net/longzhoufeng/article/details/82421322

3.如何不翻牆情況下安裝kubelet,kubeadm和kubectl

https://blog.csdn.net/weixin_44256791/article/details/85254859

安裝指定版本的kubelet,kubeadm和kubectl

apt-get install -y kubelet=1.13.0-00 kubeadm=1.13.0-00 kubectl=1.13.0-00

初始化制定版本的k8s

kubeadm init --apiserver-advertise-address 192.168.0.120 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.13.0

4.k8s需跟指定版本的docker適配

https://blog.csdn.net/cdbdqn001/article/details/88183777

5.解決[ERROR SystemVerification]: unsupported kernel release: 5.0.0-37-generic的方案

https://github.com/clearlinux/distribution/issues/528


正式搭建步驟

準備環境:雙核CPU和2G運行內存

1.安裝docker

①apt-get update

②根據k8s安裝指定版本的docker

版本選擇依據:

如果kubernetes的版本為1.8-1.11,docker版本必須為1.11.2-1.13.1和docker-ce版本為17.03.x

如果kubernetes的版本從1.12開始,docker版本必須為17.06/17.09/18.06

詳細版本依賴請參照該地址:

https://stackoverflow.com/questions/53256739/which-kubernetes-version-is-supported-in-docker-version-18-09

③選擇適配docker版本進行安裝:

1>卸載系統原本自帶的版本

sudo apt-get remove docker docker-engine docker-ce docker.io

2>更新apt包索引

sudo apt-get update

3>安裝以下包以使apt可以通過HTTPS使用存儲庫(repository)

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

4>添加Docker官方的GPG密鑰

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

5>使用下面的命令來設置stable存儲庫

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

6>再更新一下apt包索引

sudo apt-get update

7>列出可用的版本

apt-cache madison docker-ce

8>選擇安裝指定版本

sudo apt-get install docker-ce=<version>

例如:sudo apt-get install docker-ce=18.06.0~ce~3-0~ubuntu

9>驗證docker是否啟動

systemctl status docker

10>若未啟動則啟動docker服務

sudo systemctl start docker

11>運行經典hello world

sudo docker run hello-world

2.安裝kubelet,kubeadm和kubectl

①因為網絡限制,不能直接從google進行安裝,轉為從阿里雲的國內鏡像進行安裝。

依次運行下面的命令:

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

cat </etc/apt/sources.list.d/kubernetes.list

deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

EOF

②更新apt-get索引

apt-get update

③k8s版本的選擇

不同版本的k8s支持系統的內核有區別,初次安裝選擇k8s的v1.13.0版本報錯如下:

...

[ERROR SystemVerification]: unsupported kernel release: 5.0.0-37-generic

...

我所使用的系統是ubuntu18.04,查詢其系統內核

sudo uname -r

參考借鑑:https://www.cnblogs.com/gaowengang/p/11272947.html(可選擇升級內核)

根據此鏈接:https://github.com/clearlinux/distribution/issues/528瞭解到內核超過5.0的

只有版本為1.14.0以上的k8s支持

apt-get install -y kubelet=1.14.0-00 kubeadm=1.14.0-00 kubectl=1.14.0-00

3.用kubeadm創建Cluster

①K8S不支持SWAP(虛擬內存) ,關閉SWAP的方法是在/etc/fstab文件中將SWAP的配置註釋掉,需要重新啟動


一次K8S搭建集群成功記錄

②初始化master

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

番外篇:關於k8s初始化都需要什麼鏡像及都是哪些版本的,可以通過以上初始化的命令可以得出。


一次K8S搭建集群成功記錄

初始化執行過程中會從google下載鏡像,因為網絡限制無法下載,記錄下需要的鏡像,需要通過其他辦法下載:(集群所有的節點<master>都需要下載以下鏡像)/<master>

docker.io已經對google倉庫做了鏡像,通過下面的命令直接從docker拉取鏡像:

(根據上述番外篇拉取制定版本的鏡像)

docker pull docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.14.0

docker pull docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.14.0

docker pull docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.14.0

docker pull docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.14.0

docker pull docker.io/mirrorgooglecontainers/pause:3.1

docker pull docker.io/mirrorgooglecontainers/etcd-amd64:3.3.10

docker pull docker.io/coredns/coredns:1.3.1

(此外查詢docker是否存在所需要的鏡像及版本,查詢地址:https://hub.docker.com/

一次K8S搭建集群成功記錄

修改鏡像的標籤:

docker tag docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.14.0 k8s.gcr.io/kube-apiserver:v1.14.0

docker tag docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.14.0 k8s.gcr.io/kube-controller-manager:v1.14.0

docker tag docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.14.0 k8s.gcr.io/kube-scheduler:v1.14.0

docker tag docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.14.0 k8s.gcr.io/kube-proxy:v1.14.0

docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1

docker tag docker.io/mirrorgooglecontainers/etcd-amd64:3.3.10 k8s.gcr.io/etcd:3.3.10

docker tag docker.io/coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

刪除重複的鏡像:

docker rmi docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.14.0

docker rmi docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.14.0

docker rmi docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.14.0

docker rmi docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.14.0

docker rmi docker.io/mirrorgooglecontainers/pause:3.1

docker rmi docker.io/mirrorgooglecontainers/etcd-amd64:3.3.10

docker rmi docker.io/coredns/coredns:1.3.1

再次執行初始化:

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

一次K8S搭建集群成功記錄


kubeadm join 192.168.0.120:6443 --token 50qvob.l87hhhu60rocytxz \\

--discovery-token-ca-cert-hash sha256:b8beb86c581e8411470340a77818c66f998785546e102235f86c0dd0c4be5432

4.配置kubectl

>推薦使用普通用戶執行kubectl,本次實驗普通用戶為chain

su chain

mkdir -p $HOME/.kupe

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

啟動kubectl命令的自動補全功能

echo "source > ~/.bashrc

5.安裝Pod網絡

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

執行如下命令部署flannel,如下所示:

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


一次K8S搭建集群成功記錄

6.添加node節點

①在master節點查詢集群token及hash等信息;

kubeadm token list

如果token已經過期,則重新生成新的token

kubeadm token create

番外篇:master初始化網絡的時候已經自帶有這些信息

...

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.194:6443 --token dg2oxq.ta22wb4vrw9cq4pt \\

--discovery-token-ca-cert-hash sha256:6512b3d9f833eba212de530856611060ab310717e829c59bdb8b5c156bb206fa

②在node節點輸入以下命令;

kubeadm join 192.168.0.194:6443 --token dg2oxq.ta22wb4vrw9cq4pt \\

--discovery-token-ca-cert-hash sha256:6512b3d9f833eba212de530856611060ab310717e829c59bdb8b5c156bb206fa

③在master節點中查詢集群節點的狀態;

kubectl get nodes

一次K8S搭建集群成功記錄

可能存在的問題:

node顯示已經加入集群,但是在master卻無法顯示;

解決方法:

1>修改各個節點的hostname:echo "new hostname" > /etc/hostname;

2>在master節點中,修改vi /etc/hosts,添加各個節點的IP及對應的域名(已驗證,此項非必須)

一次K8S搭建集群成功記錄

3>master節點重新初始化網絡,生成新的token;node節點重新加入集群;

# for master

kubeadm reset

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

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

#for node

kubeadm reset

kubeadm join 192.168.0.194:6443 --token dg2oxq.ta22wb4vrw9cq4pt \\

--discovery-token-ca-cert-hash sha256:6512b3d9f833eba212de530856611060ab310717e829c59bdb8b5c156bb206fa

7.調試k8s集群節點狀態

>master節點查詢

kubectl get nodes

kubectl get pod --all-namespaces

一次K8S搭建集群成功記錄

除非STATUS為running狀態,否則都為非正常狀態。

解決NotReady狀態的方法:

1>systemctl restart docker; 或者,

2>忘記安裝Pod網絡了,重新安裝即可;或者,

3>服務器內存不夠,加內存。

4>檢查所有節點是否正確安裝所有的涉及k8s的docker鏡像

8.成功搭建k8s框架

一次K8S搭建集群成功記錄

9.安裝helm教程

https://helm.sh/docs/intro/install/

法一:

一次K8S搭建集群成功記錄

法二:

一次K8S搭建集群成功記錄

先查看幫助

一次K8S搭建集群成功記錄

使用腳本安裝指定版本helm

一次K8S搭建集群成功記錄

...

helm自動補全的功能設置

https://blog.csdn.net/bbwangj/article/details/81087911

一次K8S搭建集群成功記錄

10.安裝dashboard

官網參考:https://github.com/kubernetes/dashboard/blob/v2.0.0-rc1/README.md

https://github.com/kubernetes/dashboard/blob/v2.0.0-rc1/docs/user/access-control/README.md#basic

一次K8S搭建集群成功記錄

網上參考:https://www.jianshu.com/p/073577bdec98

https://www.jianshu.com/p/6f42ac331d8a

步驟①:To deploy Dashboard, execute following command:

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc1/aio/deploy/recommended.yaml

步驟②:To access Dashboard from your local workstation you must create a secure channel to your Kubernetes cluster. Run the following command:

$ kubectl proxy

步驟③:Now access Dashboard at:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.

一次K8S搭建集群成功記錄

生成token的命令

官方參考:https://kubernetes.io/docs/reference/access-authn-authz/authentication/#service-account-tokens(還沒掌握要點,預備以後深度研究使用)

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

一次K8S搭建集群成功記錄

11.安裝Scope

一次K8S搭建集群成功記錄

正確姿勢?(貌似不可行)

kubectl apply --namespace=weave -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\\n')"

一次K8S搭建集群成功記錄

真正的正確姿勢:(具體參考:https://blog.51cto.com/wzlinux/2334210

kubectl apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\\n')&k8s-service-type=NodePort"

一次K8S搭建集群成功記錄

查看運行狀態及監聽端口

一次K8S搭建集群成功記錄

訪問:http://master_ip:30546/


分享到:


相關文章: