1. 程式人生 > >微服務之容器化技術---kubernetes的安裝

微服務之容器化技術---kubernetes的安裝

Kubernetes的安裝

配置叢集時注意:時間同步

環境準備

三臺機器

kube1-master:192.168.3.166
kube2-node1:192.168.3.242
kube3-node2:192.168.3.190

配置主機名(/etc/hostname)

  • 192.168.3.166(作為master)
> vim /etc/hostname
kube1-master
  • 192.168.3.242(作為node1)
> vim /etc/hostname
kube2-node1
  • 192.168.3.190(作為node2)
> vim /etc/hostname
kube3-node2

配置hosts(/etc/hosts)

  • 192.168.3.166(作為master)
> vim /etc/hosts
192.168.3.166 kube1-master
192.168.3.242 kube2-node1
192.168.3.190 kube3-node2
  • 192.168.3.242(作為node1)
> vim /etc/hosts
192.168.3.166 kube1-master
192.168.3.242 kube2-node1
192.168.3.190 kube3-node2
  • 192.168.3.190(作為node2)
> vim /etc/hosts
192.168.3.166 kube1-master
192.168.3.242 kube2-node1
192.168.3.190 kube3-node2

配置完成後,重啟計算機,可以相互ping,如果可以ping通,則表示配置成功。

配置master

配置倉庫

  • 獲取docker repo
> cd /etc/yum.repos.d
> wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
> # 查詢docker-ce可用版本
> yum list docker-ce --showduplicates|sort -r
  • 獲取kubernetes
> vim kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
> :wq(儲存退出)
> yum repolist

開始安裝

> yum install docker-ce kubelet kubeadm kubectl

這樣雖然可以安裝,但是後續會出現docker和kubernetes版本不相容的問題,kubernetes的當前stable版本是V1.12.2,docker的當前stable版本是V18.09,但是kubernetes V1.12.2並不相容docker V18.09,而只支援docker V18.06,所以需要指定docker的版本,如下:

> yum install docker-ce-18.06.1.ce

安裝完成後需要配置國內映象,否則會出現下載速度很慢或者有的映象無法獲取的現象,配置映象的方法如下:

> cd /etc/docker
{
  "registry-mirrors": ["https://krg1ud1i.mirror.aliyuncs.com"]
}
> systemctl daemon-reload
> systemctl restart docker

安裝過程中會出現gpgcheck錯誤的問題,可以用如下方法解決:

> wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
> rpm --import yum-key.gpg
> wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> rpm --import rpm-package-key-gpg

繼續安裝,則安裝成功!

修改相關配置檔案

修改docker配置檔案
> vim /usr/lib/systemd/system/docker.service
# 在ExecStart上面增加如下語句
Environment="HTTPS_PROXY=http://www.ik8s.io:10080" 
Environment="NO_PROXY=127.0.0.0/8,172.20.0.0/16"

修改完成後,啟動docker

> systemctl daemon-reload
> systemctl start docker
> cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
> 1
> cat /proc/sys/net/bridge/bridge-nf-call-iptables
> 1

確保這兩個檔案儲存的都是1,就不用改了。
到這裡,docker的配置修改完成。

修改kubernetes配置檔案

首先使用如下命令檢視:

> rpm -ql kubelet
> cat /etc/sysconfig/kubelet

啟動kubelet

# 啟動kubelet
> systemctl start kubelet
# 檢視kubelet狀態
> systemctl status kubelet
# 為失敗:code=exited,status=255

使用如下命令檢視:

> tail /var/log/messages

列印如下錯誤資訊:

Nov 10 23:31:53 bigdata kubelet: F1110 23:31:53.115865    4150 server.go:190] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory

這個時候,先停止kubelet:

> systemctl stop kubelet

設定開機自啟動:

> systemctl enable kubelet
> systemctl enable docker
kubeadm 初始化

配置忽略kubelet:

> vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

執行初始化命令前,需要先拉取映象,因為這些映象無法從國內docker映象加速器獲取

> kubeadm config images list

顯示需要拉取的映象:

k8s.gcr.io/kube-apiserver:v1.12.2
k8s.gcr.io/kube-controller-manager:v1.12.2
k8s.gcr.io/kube-scheduler:v1.12.2
k8s.gcr.io/kube-proxy:v1.12.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.2

這裡採用先從國內映象加速器獲取這些映象,然後使用tag標記為kubernetes的映象tag:

  • 先從國內映象加速器獲取映象:
docker pull mirrorgooglecontainers/kube-apiserver:v1.12.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.12.2
docker pull mirrorgooglecontainers/kube-scheduler:v1.12.2
docker pull mirrorgooglecontainers/kube-proxy:v1.12.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
docker pull coredns/coredns:1.2.2
  • 再標記為kubernetes的映象tag
docker tag mirrorgooglecontainers/kube-apiserver:v1.12.2 k8s.gcr.io/kube-apiserver:v1.12.2
docker tag mirrorgooglecontainers/kube-controller-manager:v1.12.2 k8s.gcr.io/kube-controller-manager:v1.12.2
docker tag mirrorgooglecontainers/kube-scheduler:v1.12.2 k8s.gcr.io/kube-scheduler:v1.12.2
docker tag mirrorgooglecontainers/kube-proxy:v1.12.2 k8s.gcr.io/kube-proxy:v1.12.2
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag coredns/coredns:1.2.2 k8s.gcr.io/coredns:1.2.2

執行初始化:

> kubeadm init --kubernetes-version=v1.12.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

執行初始化命令前,需要啟動kubelet

> systemctl start kubelet

初始化完成後,會輸出一些資訊,這些資訊在後面配置node叢集中是必須的,所以需要儲存,如下:

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 can now join any number of machines by running the following on each node
as root:
  kubeadm join 192.168.3.166:6443 --token sjh8aj.5nashad8b75bwkh8 --discovery-token-ca-cert-hash sha256:e31b4a3086ad933e7ca25bbf8ca711c10257c2a3b022649c8747ff182e305a95

初始化完成後,需要使用flannel配置網路:

> kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

接著執行如下命令:

> mkdir -p $HOME/.kube
> sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

使用下列命令檢視節點資訊:

> kubectl get nodes
> kubectl get pods -n kube-system -o wide

配置nodes

在node1和node2上同樣需要配置docker,kubeadm,kubelet,kubectl,首先將master上的一些資原始檔複製到node1和node2上:

> scp docker-ce.repo kubernetes.repo rpm-package-key.gpg [email protected]:/etc/yum.repos.d
> scp docker-ce.repo kubernetes.repo rpm-package-key.gpg [email protected]:/etc/yum.repos.d

然後按照在master上安裝的方式,分別安裝docker,kubeadm,kubelet,kubectl