參考借鑑
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 <
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的配置註釋掉,需要重新啟動
②初始化master
kubeadm init --apiserver-advertise-address 192.168.0.120 --pod-network-cidr=10.244.0.0/16
番外篇:關於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/)
修改鏡像的標籤:
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
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
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
可能存在的問題:
node顯示已經加入集群,但是在master卻無法顯示;
解決方法:
1>修改各個節點的hostname:echo "new hostname" > /etc/hostname;
2>在master節點中,修改vi /etc/hosts,添加各個節點的IP及對應的域名(已驗證,此項非必須)
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
除非STATUS為running狀態,否則都為非正常狀態。
解決NotReady狀態的方法:
1>systemctl restart docker; 或者,
2>忘記安裝Pod網絡了,重新安裝即可;或者,
3>服務器內存不夠,加內存。
4>檢查所有節點是否正確安裝所有的涉及k8s的docker鏡像
8.成功搭建k8s框架
9.安裝helm教程
https://helm.sh/docs/intro/install/
法一:
法二:
先查看幫助
使用腳本安裝指定版本helm
...
helm自動補全的功能設置
https://blog.csdn.net/bbwangj/article/details/81087911
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
網上參考: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/.
生成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}')
11.安裝Scope
正確姿勢?(貌似不可行)
kubectl apply --namespace=weave -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\\n')"
真正的正確姿勢:(具體參考: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"
查看運行狀態及監聽端口
訪問:http://master_ip:30546/
閱讀更多 cekongsb 的文章