kubeadm1.7 搭建 Kubernetes 集羣實操

    使用kubernetes 搭建集羣,由於網絡等緣由,對於那些初識k8s 的人,是一件很困難的事情,這裏記錄下整個集羣搭建的過程和一些坑。node

該文章後續仍在不斷的更新修改中, 請移步到原文地址http://www.dmwan.cc/?p=150linux

    1、環境準備,操做系統:centos7.4 。第一個坑就是centos6.8安裝阿里源的 kubernetes 會有依賴錯誤。git

ip 地址 hostname
192.168.0.11 k8s-1
192.168.0.12 k8s-2

    主機名處理,爲了防止域名解析出錯,這裏先修改hostname:docker

# 寫入 hostname(node 節點後綴改爲 .node)
echo "k8s-1" > /etc/hostname 
# 加入 hosts
echo "192.168.0.11   k8s-1" >> /etc/hosts
echo "192.168.0.12   k8s-2" >> /etc/hosts
# 不重啓狀況下使內核生效
sysctl kernel.hostname=k8s-1

    而後,關閉防火牆和SE:shell

vi /etc/selinux/config
disabled
setenforce 0

systemctl disable firewalld
systemctl stop firewalld
systemctl disable iptables # 若是錯誤,yum install -y iptables
systemctl stop iptables

yum install -y ebtables
sysctl net.bridge.bridge-nf-call-iptables=1

    第二步,安裝 kubernetes。centos

    這裏最大的坑就是兼容性問題,注意最好用centos7。安裝方式有兩個,一個是本身編譯,第二個能夠使用阿里的源直接安裝rpm 包。api

    這裏使用阿里源安裝1.7:bash

#docker yum源
cat >> /etc/yum.repos.d/docker.repo <<EOF
[docker-repo]
name=Docker Repository
baseurl=http://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7
enabled=1
gpgcheck=0
EOF

#kubernetes yum源
cat >> /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

      安裝docker 和 kubernetes,正常安裝,這裏應該不會報依賴錯誤。網絡

yum install -y docker-engine-1.12.6-1.el7.centos.x86_64;
yum install -y kubernetes-cni-0.5.1-0.x86_64 kubelet-1.7.2-0.x86_64 kubectl-1.7.2-0.x86_64 kubeadm-1.7.2-0.x86_64

    第三步,拉取kubeadm 的依賴鏡像。這個步驟原本能夠省略的,可是國內網絡環境緣由,直接kubeadm init ,k8s 會本身去源站拉鏡像,會hang 死,直接將對應版本 鏡像先拉到本地,這樣init 才能很快成功。app

    這裏我寫了個shell 腳本,從我我的的docker hub 去拉取這些鏡像,而後tag name :

images=(kube-proxy-amd64:v1.7.2 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.7.2 kube-controller-manager-amd64:v1.7.2 kube-apiserver-amd64:v1.7.2 etcd-amd64:3.0.17 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.6.1 k8s-dns-sidecar-amd64:1.14.4 )
for imageName in ${images[@]} ; do
  docker pull caucyming/$imageName
  docker tag caucyming/$imageName gcr.io/google_containers/$imageName
  docker rmi caucyming/$imageName
done

docker pull caucyming/weave-kube:2.3.0
docker tag caucyming/weave-kube:2.3.0 weaveworks/weave-kube:2.3.0
docker rmi caucyming/weave-kube:2.3.0

docker pull caucyming/weave-npc:2.3.0
docker tag caucyming/weave-npc:2.3.0 weaveworks/weave-npc:2.3.0
docker rmi caucyming/weave-npc:2.3.0

    這裏爲何是這些鏡像和這些鏡像的版本,參看/etc/kubernetes/manifests 下的yaml 文件,kubeadm 就是不斷 kubectl create 這些文件,要是版本不對,就去源站拉。

      由於網絡問題,caucyming 是我我的的docker hub 帳號,我經過在docker hub 上建立自動構建,由docker hub 去幫我從源站拉取,我直接從docker hub pull 鏡像,就不會出現卡死的問題了,固然,也能夠不這麼作,直接全局代理,可是這樣仍是更快點。爲了穩定,也能夠使用本身的docker hub去自動構建,這個操做比較簡單。

    weave 的版本,這裏提一下,這裏對應yaml 文件是wave-kube-1.6。這裏下面會提到,版本不對,會致使dns 鏡像起不來。

    第四步,初始化:

systemctl enable kubelet
systemctl start kubelet
kubeadm init --kubernetes-version=v1.7.2 # 這裏還能夠指定其餘參數,能夠參考help

    這裏提一下,若是這裏init 失敗,或者機器重啓,須要reset kubeadm,不然,識別到容器和/etc/kubernetes 等目錄,會致使init 失敗。

    重啓的話,直接:

kubeadm reset

    到這一步,等1min 左右,若是正常,就會顯示下面這條token了,這條token很重要,後期集羣加機器要依賴這token:

kubeadm join --token=b17964.5d8a3c14e99cf6aa 192.168.0.11:6443

     若是運氣很差,會永遠卡死在這,這裏的錯,很是多,特別是上面有任何一個版本依賴不對,都會卡死。那如何查看問題出在哪裏?能夠經過journalctl 查看。有幾個錯我第一次安裝的時候遇到過,cni初始化的問題,網上帖子一大堆,還有端口不對的問題,還有一堆 鏈接被拒絕的問題,保證版本對,防火牆關了,通常仍是能正常經過的:

journalctl -xeu kubelet

    第五步,部署dns ,安裝weave 網絡

    網絡方案不少,有weave 和 flanneld等,這裏選擇weave,這裏注意wave-kube 的版本與前面的image 的版本要求是一致的。

kubectl apply -f https://git.io/weave-kube-1.6

    這裏安裝成功的話,執行下面命令,查看全部namespace 的pod 能發現 dns 的三個插件都能running。 

kubectl get pods -o wide --all-namespaces

    若是發現哪一個pod 是異常的,能夠describe 查看event 和log ,基本能debug 出問題在哪裏。

NAMESPACE     NAME                                              READY     STATUS    RESTARTS   AGE       IP              NODE
kube-system   etcd-izwz9ap4sedl64wboiyh6cz                      1/1       Running   0          55m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   kube-apiserver-izwz9ap4sedl64wboiyh6cz            1/1       Running   0          54m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   kube-controller-manager-izwz9ap4sedl64wboiyh6cz   1/1       Running   0          55m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   kube-dns-3913472980-l8ghd                         3/3       Running   0          55m       10.32.0.2       izwz9ap4sedl64wboiyh6cz
kube-system   kube-proxy-n5332                                  1/1       Running   0          55m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   kube-scheduler-izwz9ap4sedl64wboiyh6cz            1/1       Running   0          54m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   weave-net-l86wx                                   2/2       Running   0          48m       172.18.214.46   izwz9ap4sedl64wboiyh6cz

    這裏能夠使用命令查pod 的異常信息,namespace 要指定,不然不能查看系統pod:

 kubectl --namespace kube-system logs kube-dns-3913472980-l8ghd

    第六步,k8s-2加入master:

    非master節點,安裝k8s 和 proxy ,pause 的image,而後join。

kubeadm join --token=b17964.5d8a3c14e99cf6aa 192.168.0.11:6443

設置配置文件路徑的環境變量:

export KUBECONFIG=/etc/kubernetes/kubelet.conf

稍後,查看Node的運行狀況:

kubectl get nodes

NAME                      STATUS    AGE       VERSION
izwz9972b5w4h8a4f1h9z7z   Ready     2h        v1.6.4
izwz9ap4sedl64wboiyh6cz   Ready     4h        v1.6.4

    兩個節點都ready ,表示安裝成功。

相關文章
相關標籤/搜索