kubeadm部署Kubernetes集群(規(guī)避各坑)

timg.jpg

如果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

1 環(huán)境準(zhǔn)備

  1. 三臺(tái)centos服務(wù)器
    master 192.168.32.130
    node1 192.168.32.131
    node2 192.168.32.132
    node3 192.168.32.133

  2. 關(guān)閉selinux和firewalld

 setenforce=0
 修改  /etc/selinux/config 中的  SELINUX=disabled

 systemctl stop firewalld
 systemctl disable firewalld
  1. 這里使用yum安裝,需要配置好yum源(這里使用aliyun)
    分別在三臺(tái)服務(wù)器安裝相關(guān)源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1添加docker-ce的yum源


cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

按照官方文檔添加k8s的yum源
  1. 打開橋接
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

2 環(huán)境部署

  1. 安裝相關(guān)程序執(zhí)行
  • master節(jié)點(diǎn)
yum install -y docker-ce kubelet kubeadm kubectl
  • node節(jié)點(diǎn)(node節(jié)點(diǎn)不操作可以不安裝kubectl)
yum install -y docker-ce kubelet kubeadm 
  1. 啟動(dòng)docker并設(shè)置開機(jī)啟動(dòng)(所有節(jié)點(diǎn))
systemctl start docker
systemctl enable docker
  1. 設(shè)置kubelet開機(jī)啟動(dòng)
systemctl enable kubelet
  1. 初始化主節(jié)點(diǎn)
kubeadm init --kubernetes-version=v1.11 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=swap

這里設(shè)置了初始化的版本,pod的網(wǎng)段,service的網(wǎng)段,可以依據(jù)kubeadm init --help自行修改。同時(shí)忽略的swap的報(bào)錯(cuò),在初始化的過程中報(bào)錯(cuò)可能會(huì)中斷初始化,可以根據(jù)實(shí)際情況依據(jù)在--ignore-preflight-errors=swap后添加忽略信息忽略。

初始化成功后會(huì)生成提示信息


按成功提示執(zhí)行命令(最后一條是當(dāng)前root用戶可不執(zhí)行)

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

保存kubeadm jion信息用于node節(jié)點(diǎn)的加入

可用 kubectl get cs查看健康情況
可用kubectl get nodes查看節(jié)點(diǎn)情況

  1. 主節(jié)點(diǎn)安裝配置flannel
    Flannel是CoreOS團(tuán)隊(duì)針對(duì)Kubernetes設(shè)計(jì)的一個(gè)Overlay網(wǎng)絡(luò)規(guī)劃服務(wù),簡(jiǎn)單來說,它的功能是讓集群中的不同節(jié)點(diǎn)主機(jī)創(chuàng)建的Docker容器都具有全集群唯一的虛擬IP地址。項(xiàng)目托管于github上地址https://github.com/coreos/flannel
    Kubernetes v1.7以上可直接使用yml安裝
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

安裝完成后可使用kubectl get pods -n kube-system查看各系統(tǒng)名稱空間組件READY和STATUS情況

  1. 加入node節(jié)點(diǎn)
    使用master節(jié)點(diǎn)初始化時(shí)候產(chǎn)生的kubeadm join命令進(jìn)行node節(jié)點(diǎn)的加入,可以使用--ignore-preflight-errors=swap添加忽略

安裝完成后可使用kubectl get nodes查看各節(jié)點(diǎn)加入情況
可使用kubectl get pods -n kube-system -o wide查看各節(jié)點(diǎn)系統(tǒng)名稱空間組件READY和STATUS情況

3. 坑點(diǎn)

  1. 關(guān)于swap的忽略
    如果初始化是在 --ignore-preflight-errors=swap上設(shè)置了依然報(bào)錯(cuò)則需要
vim /etc/sysconfig/kubelet
添加KUBELET_EXTRA_ARGS="--fail-swap-on=false"
  1. 關(guān)于鏡像無法加載
    在初始化過程中master節(jié)點(diǎn)會(huì)下載kube-proxy,kube-controller-manager,kube-apiserver,kube-scheduler,coredns,etcd,pause等一些鏡像,現(xiàn)階段網(wǎng)絡(luò)可能訪問不到,可在報(bào)錯(cuò)信息中或者/var/log/message中查看鏡像,將文件中鏡像地址進(jìn)行內(nèi)容替換即可:
    k8s.gcr.io替換為
    registry.cn-hangzhou.aliyuncs.com/google_containers
    registry.aliyuncs.com/google_containers
    mirrorgooglecontainers

以上三選一
使用docker pull將下載下來
然后再使用 docekr tag將鏡像打上需要的k8s.gcr.io標(biāo)簽的鏡像
node節(jié)點(diǎn)需要的鏡像可以通過docker save將master節(jié)點(diǎn)的鏡像保存拷貝到node節(jié)點(diǎn)之后通過docker load -i加載

或者
kubeadm init時(shí)加上--image-repository=registry.aliyuncs.com/google_containers
也就是上面的三個(gè)鏡像倉(cāng)庫(kù)地址中的一個(gè)都行

  1. K8s集群初始化成功后,kubectl get nodes 查看節(jié)點(diǎn)信息時(shí)報(bào)錯(cuò)
    報(bào)錯(cuò)信息:The connection to the server localhost:8080 was refused - did you specify the right host or port?

解決方法:

執(zhí)行以下命令

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

再次查看節(jié)點(diǎn)信息即正常

4.解決GitHub的raw.githubusercontent.com無法連接問題

修改hosts
sudo vi /etc/hosts
添加以下內(nèi)容保存即可 (IP地址查詢后相應(yīng)修改,可以ping不同IP的延時(shí) 選擇最佳IP地址)

# GitHub Start
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
# GitHub End
  1. 沒有記token如何加入K8S集群

a. 生成一條永久有效的token kubeadm token create --ttl 0
查看token kubeadm token list
b. 獲取ca證書sha256編碼hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
c. node節(jié)點(diǎn)加入
kubeadm join 192.168.28.128:6443 --token <token> --discovery-token-ca-cert-hash sha256:<sha256>

  1. 其它問題
    其它問題如果看不出報(bào)錯(cuò)的都可以在/var/log/message查看問題
    一些不可達(dá)的問題和解析問題基本都是跟/etc/hosts解析相關(guān),需要添加解析信息
    同時(shí)跟一些忽略相關(guān)的可以通過在--ignore-preflight-errors=上添加忽略信息
    如果顯示初始化完成可以使用kubeadm reset重置初始化信息
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • k8s組件 master,node master中包括apiserver,scheduler,controller...
    stephe_c閱讀 608評(píng)論 0 1
  • 上篇文章主要介紹了k8s(一) 基本概念與組件原理[http://www.itdecent.cn/p/c231c...
    Anson前行閱讀 1,710評(píng)論 0 4
  • Kubernetes是Google大神開源的容器管理組件,常被稱為K8s (PS:K表示第一個(gè)字母,s表示最后一個(gè)...
    biggeng閱讀 6,346評(píng)論 0 11
  • kubeadm安裝k8s集群kubeadm安裝Kubernetes V1.16.2集群詳細(xì)文檔kubeadm安裝 ...
    digitalgd_zyg閱讀 690評(píng)論 0 1
  • 人們?cè)谂c自己的夢(mèng)想擦肩而過時(shí) 往往會(huì)有這樣的感慨 一次又一次的錯(cuò)過 一次又一次的失去 失去的都是讓我夢(mèng)回縈繞的東西...
    逍遙女郎閱讀 225評(píng)論 0 3

友情鏈接更多精彩內(nèi)容