基于CENTOS7.6(分區時去除SWAP分區)
或者在系統中通過swapoff -a,并在/etc/fstab中注釋swap分區
安裝Docker,需要注意不是所有版本都可以,需要根據K8S的支持列表安裝Docker,這里選擇18.09.9
安裝前置軟件 yum install -y yum-utils device-mapper-persistent-data lvm2
設置Docker yum源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
查看倉庫中所有docker-ce版本 yum list docker-ce --showduplicates | sort -r
安裝18.09.9 yum install docker-ce-18.09.9
啟動docker systemctl enable docker && systemctl start docker
安裝Kubeadm,通過Kubeadm安裝K8S
配置本地docker registry
下載registry image并啟動registry鏡像容器
docker pull registry
docker run --restart=always -d -p 80:5000 -v /mnt/date/registry:/var/lib/registry registry
將阿里云的K8S鏡像push到本地倉庫
Docker默認采用https,因此需要將本地倉庫設置為insecure-registries才可以push到本地倉庫。同時因為無法訪問gcr.io,需要定向到本地倉庫,因此也設置為insecure
echo -e '{\n"insecure-registries":["k8s.gcr.io", "gcr.io", "quay.io","10.128.128.211:80"]\n}' > /etc/docker/daemon.json systemctl restart docker
下載K8S鏡像并push到本地
for i in `kubeadm config images list | grep "^k8s" | awk -F "/" '{print $2}'`; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$i; docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$i 10.128.128.211:80/$i; docker push 10.128.128.211:80/$i; done
檢查是否已經上傳至本地
curl 10.128.128.211:80/v2/_catalog
域名訪問轉發,將對于gcr.io的訪問定向到本地倉庫
REGISTRY_HOST="10.128.128.211"
yes | cp /etc/hosts /etc/hosts_bak
cat /etc/hosts_bak|grep -vE '(gcr.io|harbor.io|quay.io)' > /etc/hosts
echo """$REGISTRY_HOST gcr.io harbor.io k8s.gcr.io quay.io """ >> /etc/hosts
通過Kubeadm安裝K8S
修改hostname
hostnamectl set-hostname master-node
檢查鏡像配置是否正確
kubeadm config images pull
初始化K8S,這里使用Flannel作為CDI,需要指定參數。最后一次初始化時需要記錄相應的token,用于后面添加Slave Node。
kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf (id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
檢查K8S安裝情況
查看各個組件的安裝情況,全都是ready狀態才是正常的 kubectl get pods --all-namespaces
trouble shooting
通過kubectl get pods --all-namespaces發行flannel有問題,提示"Init:ImagePullBackOff"
通過kubectl describe pod -n kube-system kube-flannel-ds-amd64-8hknp,發現Failed to pull image "quay.io/coreos/flannel:v0.11.0-amd64",原來是無法下載image。回看上面的操作,在/etc/hosts中添加了quay.io的轉發,從/etc/hosts拿掉后,可以下載。ubectl get pods --all-namespaces也顯示正常。