Ubuntu下k8s安裝教程

官網:https://kubernetes.io/docs/setup/independent/install-kubeadm/

1 我的主機是在aliyun上,默認配置了阿里源

配置阿里源:

修改/etc/apt/source爲:

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

 

2 安裝docker

apt-get install docker.io

查看docker版本:

 

3 安裝k8s

主要是安裝kubeadm kubelet kubectl

kubeadm : 用來初始化集羣的指令

kubelet : 在集羣中的每個節點上用來啓動 pod 和 container 等

kubectl: 用來與集羣通信的命令行工具

3.1 默認是從谷歌下載,我們可以添加阿里的k8s源

在/etc/apt/source的最後增加一行

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

3.2 進行下載:

apt-get update && apt-get install -y apt-transport-https curl
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated

 

4 初始化master結點,執行kubeadm init

由於kubeadm init執行時會下載一些從谷歌服務器的docker鏡像,我們可以提前下載好這些鏡像(避免訪問谷歌)

直接執行會報錯:

4.1 列舉並下載所需鏡像

kubeadm config images list

DockerHub上已經備份了這些鏡像(主要是備份在mirrorgooglecontainers上,鏡像coredns可以直接搜索的到):

docker pull mirrorgooglecontainers/kube-apiserver:v1.13.3
docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.3
docker pull mirrorgooglecontainers/kube-scheduler:v1.13.3
docker pull mirrorgooglecontainers/kube-proxy:v1.13.3
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
docker pull coredns/coredns:1.2.6

然後修改tag成k8s執行init檢查的鏡像:

docker tag mirrorgooglecontainers/kube-apiserver:v1.13.3 k8s.gcr.io/kube-apiserver:v1.13.3
docker tag mirrorgooglecontainers/kube-controller-manager:v1.13.3 k8s.gcr.io/kube-controller-manager:v1.13.3
docker tag mirrorgooglecontainers/kube-scheduler:v1.13.3 k8s.gcr.io/kube-scheduler:v1.13.3
docker tag mirrorgooglecontainers/kube-proxy:v1.13.3 k8s.gcr.io/kube-proxy:v1.13.3
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6

4.2 配置kubelet的cgroup drive

確保docker的cgroup drive和kubelet的一致

查看docker的:

docker info | grep -i cgroup

kubelet的:

vim /etc/default/kubelet

修改爲:

KUBELET_EXTRA_ARGS=--cgroup-driver=cgroupfs

重啓kubelet:

systemctl daemon-reload
systemctl restart kubelet

 

4.3 執行kubeadm init

主要是以下命令:

kubeadm init --kubernetes-version="v1.13.3"  --pod-network-cidr=10.244.0.0/16 
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
kubectl get pods --all-namespaces
kubectl get nodes

詳細介紹:

查看kubeadm的版本:

執行:

kubeadm init --kubernetes-version="v1.13.3" --pod-network-cidr=10.244.0.0/16

 

注意第二個紅圈的命令用於添加新結點(這個給出的kubeadm join後的hash值有效期是24小時,24小時過後便失效

可以使用 kubeadm token list 來查看當前的 token 表

如果超過了24小時,又準備繼續添加新的節點,那麼就需要在master節點創建新的token

kubeadm token create --print-join-command

使用過後會輸出一串新的kubeadm join 及hash值。利用這個新的命令就可以添加新的節點進入集羣了

 

 

4.4 然後執行命令:

非root用戶執行:

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

root用戶執行(僅本次有效),這個文件包含了登陸kubectl的驗證信息:

export KUBECONFIG=/etc/kubernetes/admin.conf

可以設置永久的環境變量,這樣下次登陸,kubectl就能直接連上本機的server,而不用再設置一次環境變量:

vim /etc/profile

末尾添加:

export KUBECONFIG=/etc/kubernetes/admin.conf

 

4.6 配置網絡插件

配置calico:

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

網絡插件選擇:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

kubectl get pods --all-namespaces 檢查

注:coredns是ContainerCreating時,是因爲kubeadm init沒有指定pod-network-cidr:

4.6 使用kubectl get nodes命令

kubectl get nodes

5 配置從節點:

和主節點一樣下載好k8s,docker,init前所需鏡像後,直接執行kubeadm join:

kubeadm join 172.26.242.27:6443 --token 1jsfkt.a7j1hg7j08gdwwla --discovery-token-ca-cert-hash sha256:a397401844993c5d8e44ff74b383d8a936a92e0fb0da1f9ebf4b3df90eb2d1ba

 

6 查看結點信息:

 

 

 

注:

1 kubeadm init命令詳情:

# kubeadm init
# --apiserver-advertise-address=59.110.220.63 開放公網ip爲apiserver 這裏填你主機的公網IP;
# --apiserver-bind-port=6443 默認綁定6443端口;
# --kubernetes-version="v1.13.3" 指定k8s集羣的版本v1.13.3(指定版本後就不需要連接google服務器進行新版本檢查了,對國內節點安裝的朋友,這個參數必不可少!!版本與你下載的kubeadm、kubectl、kubelet相同即可);
# --pod-network-cidr=10.244.0.0/16 選擇calico網絡pod ,這是用於k8s集羣間通信的網絡組件,有多種可供選擇的方式,詳見:https://v1-11.docs.kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network
# --apiserver-cert-extra-sans=172.17.76.239 添加內網 apiserver 節點間通訊使用內網傳遞信息 這裏填寫你主機的內網IP;
 
# 於是乎一個比較可靠的 kubeadm init 命令就被我們得到了:
kubeadm init --apiserver-advertise-address=59.110.220.63 --apiserver-bind-port=6443 --kubernetes-version="v1.13.3"  --pod-network-cidr=10.244.0.0/16 --apiserver-cert-extra-sans=172.17.76.239

2 kubeadm reset

如果從節點執行了init,可以執行kubeadm reset後再執行kubeadm join

kubeadm reset:如果想重新運行 init或者join

 

3  docker join 時 --discovery-token-ca-cert-hash 忘了

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

輸出:

8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78

 

4  刪除K8s節點;

master上運行:

kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
kubectl delete node <node name>

節點上運行:

kubeadm reset

 

 

參考文檔:

https://blog.csdn.net/weixin_38070561/article/details/82982710

 

出錯:

1 運行 kubectl get node出錯:

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

解決:mv $HOME/.kube $HOME/.kube.bak

查看pod狀態時:kubectl describe pod Pod_Name  出現報錯:

nodes had taints that the pod didn't tolerate

原因:kubernetes出於安全考慮默認情況下無法在master節點上部署pod

執行:

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

 

 

如果覺得配置k8s麻煩,可以配置rancher,rancher通過圖像化界面管理k8s集羣,而且沒有網絡的問題。

https://blog.csdn.net/qq_35720307/article/details/87866834

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章