天天看點

1. 使用Kubeadm部署k8s

使用Kubeadm部署k8s

本文參考

官網教程

,安裝過程一波三折,幾次想放棄,但又不甘心,一邊翻着源碼一邊看着教程,最終才有了下面的内容。

環境要求

1. Ubuntu 16.04 2核4G

注意這裡最好是2核,部署安裝時發現單核導緻ingress-nginx部分pod無啟動

安裝開始之前請確定使用的root賬戶,非root賬戶請自行添加sudo           

2. 安裝docker

我這裡使用的是18.03.1           

3. 安裝Kubeadm, kubelet,kubectl

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl           

4. 永久禁用交換分區

打開/etc/fstab檔案并找到包含swap文本行在開頭注釋,類似如下:

/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1
UUID=d11aa7b5-457b-4bc1-80fd-c5e33f63ac04 /boot           ext2    defaults        0       2
## 注釋一下兩行
#/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0
#/dev/mapper/cryptswap1 none swap sw 0 0           

5. 禁用防火牆

禁用防火牆并不是安全的做法,如果在真實的環境中請檢視k8s文檔開放指定的端口。
我這裡簡單粗暴直接禁用防火牆:
ufw disable           

6. 配置cgroup驅動類型

docker中有兩種cgroup驅動類型:cgroupfs,systemd

1. 檢視docker使用的驅動類型:`docker info|grep -i cgroup`
2. 修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 配置檔案中的cgroup類型與上一步執行結果對應
    //假如該檔案中有如下這一行
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
    //如果沒有上面這行,需要添加,并修改cgroup-driver為docker使用的類型,我的安裝環境正确的配置如下:
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
3. 使上一步配置生效
    systemctl daemon-reload
    systemctl restart kubelet           

部署k8s

執行kubeadm init指令之前需要提前準備一些docker鏡像,因為這些鏡像位于google伺服器上,我們沒有用辦法正常擷取,是以這裡我們從自己的鏡像伺服器下載下傳。

我這裡寫了一個簡單的腳本檔案,便于你擷取所需的docker鏡像。           
下載下傳鏡像shell腳本
# --kubernetes-version=v1.10.2 指定我們要安裝的k8s版本
# --feature-gates=CoreDNS=true 使用CoreDNS來做主機名到IP的對應關系
# --pod-network-cidr=192.168.0.0/16 這裡使用的網絡類型為Calico
kubeadm init --kubernetes-version=v1.10.2 --feature-gates=CoreDNS=true --pod-network-cidr=192.168.0.0/16           

如果部署成功你會看到如下顯示:

......
Your Kubernetes master has initialized successfully!

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/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 194.168.1.15:6443 --token ninsl0.hgnutou2p9f9u8d4 --discovery-token-ca-cert-hash sha256:ba73076c46a143260ba876d09174f558deb1941794621591cbc104d63c50adaa           

接下來執行以下指令,使kubectl指令生效:

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

此時執行kubectl get nodes可以看到傳回結果中master處于NotReady狀态

NAME        STATUS     ROLES     AGE       VERSION
k8s-node   NotReady   master    26m       v1.10.2           

部署Calico網絡插件

kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml           

稍等片刻後檢視master節點的狀态:kubectl get nodes

NAME        STATUS    ROLES     AGE       VERSION
k8s-node2   Ready     master    40m       v1.10.2