K-1 Kubernets踩坑日誌安裝篇

開始安裝K8S集羣了,一開始我還打算先創建三個負載均衡的master節點的,不事後來據說最一開始的測試環境只要一個master節點外加兩個node節點便可。
html


  • 系統初始化node

首先是三個centos的服務器。而後開始安裝組件,這裏爲了方便三個機器上裝的軟件,拉的鏡像都同樣了,實際上能夠少安裝的一點,不過反正也節約不了多少空間,由於這些軟件和鏡像不是很大。linux

先是關防火牆和selinux之類的操做確保這些設置不會影響到操做。
git

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

swapoff -a
setenforce 0

還有記得把/etc/fstab裏的有swap字符的一行給註釋掉,不然重啓後kubelet的服務會出錯。參考命令github

sed -i 's/.*swap.*/#&/' /etc/fstab


  • 安裝dockerdocker

接下來就是開始下軟件和拉鏡像的活了。它們同時存在的問題就是官方源不能下(由於它是某外國知名搜索引擎的服務器)。因此要加一下鏡像源。centos

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce

systemctl start docker
systemctl status docker
systemctl enable docker


  • 安裝kubernetsapi

安裝 kubelet、kubeadm、kubectl,注意一下版本,yum源下載的版本默認是最新的,那麼容器鏡像至少要比這個版本新,若是沒有,請在下載的時候註明版本信息。我在作本次測試環境的時候全部的軟件和鏡像都是1.16.0的版本。bash

加阿里雲的鏡像源。
服務器

cat>>/etc/yum.repos.d/kubrenetes.repo<<EOF
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

加上版本的下載方法。

yum install -y kubelet-1.16.0 kubeadm-1.16.0 kubectl-1.16.0

若是你已經下錯了,能夠用一些命令來解決。

rpm -qa | grep kube 查看版本

yum downgrade <package> //這個是yum降級的命令



先輸入命令

kubeadm config images list

它會告訴你,你須要下載哪些鏡像,你內心得有個底,至少這些鏡像你要先下載完成才能完成繼續。

當我在作的時候,屏幕上顯示的是

k8s.gcr.io/kube-apiserver:v1.16.7

k8s.gcr.io/kube-controller-manager:v1.16.7

k8s.gcr.io/kube-scheduler:v1.16.7

k8s.gcr.io/kube-proxy:v1.16.7

k8s.gcr.io/pause:3.1

k8s.gcr.io/etcd:3.3.15-0

k8s.gcr.io/coredns:1.6.2

若是你輸入了命令,後面的版本可能會有變化,可是前面基本是是一致的。



而後開始用kubeadmin init的方法去初始化集羣。不過直接運行網上常見的命令估計90%是失敗的。我在踩坑的時候找到兩個辦法,能夠試試。

一個是:

kubeadm init --kubernetes-version=v1.16.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --image-repository=registry.aliyuncs.com/google_containers

這個方法加了一個--image-repository=registry.aliyuncs.com/google_containers參數改變了下載地址。

不過這麼作以後,你依舊要把這些docker鏡像的倉庫名改成k8s.gcr.io。

例如你在用命令docker images看到了鏡像的列表。

裏面有一個鏡像叫作registry.aliyuncs.com/google_containers/kube-apiserver

那麼你要用命令docker tag registry.aliyuncs.com/google_containers/kube-apiserver   k8s.gcr.io/kube-apiserver

這樣的方法去改。有不少個這樣的鏡像它們的倉庫名都要改。改完以後你能夠用docker rmi <images>逐個的把原來registry.aliyuncs.com/google_containers打頭的鏡像通通刪除。固然你留着也沒問題。

第二個方法,請參考https://www.cnblogs.com/xingyys/p/11594189.html

用腳本去完成操做

#!/bin/bash## 使用以下腳本下載國內鏡像,並修改tag爲google的tagset -e

KUBE_VERSION=v1.16.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.15-0
CORE_DNS_VERSION=1.6.2

GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

images=(kube-proxy:${KUBE_VERSION}kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})

for imageName in ${images[@]} ; do
  docker pull $ALIYUN_URL/$imageName
  docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
  docker rmi $ALIYUN_URL/$imageNamedone
done

而後再運行init命令(如下命令的參數怎麼設置呢?第二行的爲本機的IP,第三行是容器的版本,第四行則是pod網絡,這個儘可能不要改吧。)

sudo kubeadm init \
 --apiserver-advertise-address 192.168.10.20 \
 --kubernetes-version=v1.16.0 \
 --pod-network-cidr=10.244.0.0/16

以下圖,而後初始化成功以後,會有一大堆的解釋,其中有幾條是讓你運行的命令,那麼就照作吧。

image.png

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

還有一條命令kubeadm join不是在本機上運行的。它看起來像這個樣子

kubeadm join 192.168.10.20:6443 --token lixsl8.v1auqmf91ty0xl0k \
    --discovery-token-ca-cert-hash sha256:c3f92a6ed9149ead327342f48a545e7e127a455d5b338129feac85893d918a55

你要記住這個命令,由於裏面有惟一的token,這個每一臺都是不同的。即便你忘了也不要緊,你能夠用

kubeadm token create --print-join-command

從新找到它。

還有就是可能你不是一次就能成功的,若是kubeadm init中途有失敗的,你須要用命令

kubeadm reset

來重置master節點。不然會報錯,報錯一般會說xxx.yaml already exist

image.png

還有關於swap分區引發的問題

image.png

程序會提醒你用如下的命令去查看問題。

systemctl status kubelet
jouralctl -xeu kubelet


在完成這一切以後,你可使用如下命令去查看pod的狀態。

kubectl get pods --all-namespaces -o wide

應該相似於這樣的一個樣子。

image.png

其中coredns這個容器的狀態時pending的,還須要裝一下網絡的組件。


安裝flanneld

你已經操做過如下的操做了吧?

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

而後下載quay.io的鏡像,同理用腳本去拉鏡像,或者本身去鏡像網站上拉鏡像。這裏依舊參考https://www.cnblogs.com/xingyys/p/11594189.html

#!/bin/bash

set -e

FLANNEL_VERSION=v0.11.0

# 在這裏修改源
QUAY_URL=quay.io/coreos
QINIU_URL=quay-mirror.qiniu.com/coreos

images=(flannel:${FLANNEL_VERSION}-amd64
flannel:${FLANNEL_VERSION}-arm64
flannel:${FLANNEL_VERSION}-arm
flannel:${FLANNEL_VERSION}-ppc64le
flannel:${FLANNEL_VERSION}-s390x)

for imageName in ${images[@]} ; do
  docker pull $QINIU_URL/$imageName
  docker tag  $QINIU_URL/$imageName $QUAY_URL/$imageName
  docker rmi $QINIU_URL/$imageNamedone
done

而後去網上下載這個文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

若是wget不能成功下載,能夠在別的地方下載以後放到服務器裏去,我就是用迅雷下載的這個文件。

kubectl apply -f kube-flanneld.yaml


node節點的安裝

我在配置node節點的時候偷懶了,我用了master相同的的方法把全部的軟件和鏡像都下載下來了,實際上只要其中的一些,根據前面那個博客上的作法,你能夠把在master上已經下載好的鏡像打包複製到node節點上。

## master上執行docker save -o pause.tar k8s.gcr.io/pause:3.1
docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy## node上執行docker load -i pause.tar 
docker load -i kube-proxy.tar 

## node上執行docker load -i pause.tar 
docker load -i kube-proxy.tar

flannel網絡也得在node上進行一遍。

而後還記得那條kubeadm join的命令嗎?就是那個帶token的那條,能夠輸入了。


在完成以上操做後,再回到master節點上,輸入命令kubectl get nodes看看相應的node都ready了嗎?

相關文章
相關標籤/搜索