CentOS 搭建 K8S,一次性成功,收藏了!

一. 爲什麼是k8s v1.16.0?
最新版的v1.16.2試過了,一直無法安裝完成,安裝到kubeadm init那一步執行後,報了很多錯,如:node xxx not found等。centos7都重裝了幾次,還是無法解決。用了一天都沒安裝完,差點放棄。後來在網上搜到的安裝教程基本都是v1.16.0的,我不太相信是v1.16.2的坑所以先前沒打算降級到v1.16.0。沒辦法了就試着安裝v1.16.0版本,竟然成功了。記錄在此,避免後來者踩坑。

本篇文章,安裝大步驟如下:

  • 安裝docker-ce 18.09.9(所有機器)
  • 設置k8s環境前置條件(所有機器)
  • 安裝k8s v1.16.0 master管理節點
  • 安裝k8s v1.16.0 node工作節點
  • 安裝flannel(master)

這裏有重要的一步,請記住自己master和node之間通信的ip,如我的master的ip爲192.168.99.104,node的ip爲:192.168.99.105. 請確保使用這兩個ip在master和node上能互相ping通,這個master的ip 192.168.99.104接下來配置k8s的時候需要用到。

我的環境:

  • 操作系統:win10
  • 虛擬機:virtual box
  • linux發行版:CentOS7
  • linux內核(使用uname -r查看):3.10.0-957.el7.x86_64
  • master和node節點通信的ip(master):192.168.99.104

二. 安裝docker-ce 18.09.9(所有機器)
所有安裝k8s的機器都需要安裝docker,命令如下:

# 安裝docker所需的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置阿里雲的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 指定安裝這個版本的docker-ce
yum install -y docker-ce-18.09.9-3.el7
# 啓動docker
systemctl enable docker && systemctl start docker

三. 設置k8s環境準備條件(所有機器)
安裝k8s的機器需要2個CPU和2g內存以上,這個簡單,在虛擬機裏面配置一下就可以了。然後執行以下腳本做一些準備操作。所有安裝k8s的機器都需要這一步操作。

# 關閉防火牆
systemctl disable firewalld
systemctl stop firewalld

# 關閉selinux
# 臨時禁用selinux
setenforce 0
# 永久關閉 修改/etc/sysconfig/selinux文件設置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 禁用交換分區
swapoff -a
# 永久禁用,打開/etc/fstab註釋掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab

# 修改內核參數
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

四. 安裝k8s v1.16.0 master管理節點
如果還沒安裝docker,請參照本文步驟二安裝docker-ce 18.09.9(所有機器)安裝。如果沒設置k8s環境準備條件,請參照本文步驟三設置k8s環境準備條件(所有機器)執行。

以上兩個步驟檢查完畢之後,繼續以下步驟。

安裝kubeadm、kubelet、kubectl
由於官方k8s源在google,國內無法訪問,這裏使用阿里雲yum源

# 執行配置k8s阿里雲源
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

# 安裝kubeadm、kubectl、kubelet
yum install -y kubectl-1.16.0-0 kubeadm-1.16.0-0 kubelet-1.16.0-0

# 啓動kubelet服務
systemctl enable kubelet && systemctl start kubelet

初始化k8s 以下這個命令開始安裝k8s需要用到的docker鏡像,因爲無法訪問到國外網站,所以這條命令使用的是國內的阿里雲的源(registry.aliyuncs.com/google_containers)。另一個非常重要的是:這裏的--apiserver-advertise-address使用的是master和node間能互相ping通的ip,我這裏是192.168.99.104,剛開始在這裏被坑了一個晚上,你請自己修改下ip執行。這條命令執行時會卡在[preflight] You can also perform this action in beforehand using ''kubeadm config images pull,大概需要2分鐘,請耐心等待。

# 下載管理節點中用到的6個docker鏡像,你可以使用docker images查看到
# 這裏需要大概兩分鐘等待,會卡在[preflight] You can also perform this action in beforehand using ''kubeadm config images pull
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --apiserver-advertise-address 192.168.99.104 --pod-network-cidr=10.244.0.0/16 --token-ttl 0

上面安裝完後,會提示你輸入如下命令,複製粘貼過來,執行即可。

# 上面安裝完成後,k8s會提示你輸入如下命令,執行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

記住node加入集羣的命令 上面kubeadm init執行成功後會返回給你node節點加入集羣的命令,等會要在node節點上執行,需要保存下來,如果忘記了,可以使用如下命令獲取。

kubeadm token create --print-join-command

以上,安裝master節點完畢。可以使用kubectl get nodes查看一下,此時master處於NotReady狀態,暫時不用管。

五. 安裝k8s v1.16.0 node工作節點
如果還沒安裝docker,請參照本文步驟二安裝docker-ce 18.09.9(所有機器)安裝。如果沒設置k8s環境準備條件,請參照本文步驟三設置k8s環境準備條件(所有機器)執行。

以上兩個步驟檢查完畢之後,繼續以下步驟。

1、安裝kubeadm、kubelet

# 執行配置k8s阿里雲源
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

# 安裝kubeadm、kubectl、kubelet
yum install -y  kubeadm-1.16.0-0 kubelet-1.16.0-0

# 啓動kubelet服務
systemctl enable kubelet && systemctl start kubelet

2、加入集羣 這裏加入集羣的命令每個人都不一樣,可以登錄master節點,使用kubeadm token create --print-join-command 來獲取。獲取後執行如下。

# 加入集羣,如果這裏不知道加入集羣的命令,可以登錄master節點,使用kubeadm token create --print-join-command 來獲取
kubeadm join 192.168.99.104:6443 --token ncfrid.7ap0xiseuf97gikl \
    --discovery-token-ca-cert-hash sha256:47783e9851a1a517647f1986225f104e81dbfd8fb256ae55ef6d68ce9334c6a2

加入成功後,可以在master節點上使用kubectl get nodes命令查看到加入的節點。

六. 安裝flannel(master機器)
以上步驟安裝完後,機器搭建起來了,但狀態還是NotReady狀態,如下圖,master機器需要安裝flanneld。

  • 下載官方fannel配置文件 使用wget命令,地址爲:(https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml),這個地址國內訪問不了,所以我把內容複製下來,爲了避免前面文章過長,我把它粘貼到文章末尾第八個步驟附錄了。這個yml配置文件中配置了一個國內無法訪問的地址(quay.io),我已經將其改爲國內可以訪問的地址(quay-mirror.qiniu.com)。我們新建一個kube-flannel.yml文件,複製粘貼該內容即可。
  • 安裝fannel
    kubectl apply -f kube-flannel.yml

七. 大功告成
至此,k8s集羣搭建完成,如下圖節點已爲Ready狀態,大功告成,完結撒花。

八. 附錄
這是kube-flannel.yml文件的內容,已經將無法訪問的地址(quay.io)全部改爲國內可以訪問的地址(quay-mirror.qiniu.com)。我們新建一個kube-flannel.yml文件,複製粘貼該內容即可。

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp.flannel.unprivileged
  annotations:
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
    seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
    apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
    apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:
  privileged: false
  volumes:
    - configMap
    - secret
    - emptyDir
    - hostPath
  allowedHostPaths:
    - pathPrefix: "/etc/cni/net.d"
    - pathPrefix: "/etc/kube-flannel"
    - pathPrefix: "/run/flannel"
  readOnlyRootFilesystem: false
  # Users and groups
  runAsUser:
    rule: RunAsAny
  supplementalGroups:

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