1. 程式人生 > >使用Kubeadm部署k8s

使用Kubeadm部署k8s

關系 url initial 賬戶 PE gin 這一 err 指定

使用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

使用Kubeadm部署k8s