05.03 Centos 7 搭建最新版 Kubernetes(10.1)集群

目前基於容器管理的Kubernetes 已經佔住了80%的市場份額,基本上以成為該領域的標準,由於國內網絡環境的影響,讓kubernetes搭建成了一道技術難題,下面就一步一步教大家如何去搭建kubernetes集群,本文所有的組件均採用的是最新版。

Centos 7 搭建最新版 Kubernetes(10.1)集群

一、kubeadm 介紹

Kubernetes 是 Google 開源的基於 Docker 的容器集群管理系統,通過 yaml 語言寫的配置文件,簡單快速的就能自動部署好應用環境,支持應用橫向擴展,並且可以組織、編排、管理和遷移這些容器化的應用。Kubeadm 是一個可以快速幫助我們創建穩定集群服務的工具,通過它,我們可以在虛擬機、實體機或者雲端快速部署一個高可用的集群服務。

二、環境、軟件準備

安裝之前,先介紹下 Kubeadm 安裝 kubernetes 需要的一些基本硬件要求。

  • 系統要求,支持的系統 Ubuntu 16.04+、 CentOS 7 、HypriotOS v1.0.1+

  • 內存要求,每臺機器至少要有 1GB 內存,否則集群啟動後,留給運行的應用可用內存就很少了。

  • 網絡要求,保證集群內所有機器之前的網絡是可以互相連通的。

本次演示我準備了兩臺系統為 CentOS Linux 7 (Core) 的虛擬機,一臺作為 Master,一臺作為 Node,默認 Master 機器不參與 Pod 調度。集群機器信息如下:

Centos 7 搭建最新版 Kubernetes(10.1)集群

三、初始化工作


1、安裝 ebtables ethtool,否則後邊執行 kubeadm init 的時候會報錯。

yum install ebtables ethtool

2、修改網絡開啟橋接網絡支持,只針對(RHEL/CentOS 7)系統。

vim /usr/lib/sysctl.d/00-system.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

3、關閉 SELinux,目的為了允許容器能夠與本機文件系統交互。

$ setenforce 0

$ systemctl daemon-reload

4、修改節點的 hostname,因為 kubernetes 是根據 hostname 來標示各節點的。

# Master 節點

$ echo "master.localdomain" > /etc/hostname

$ echo "10.236.65.125 master.localdomain" >> /etc/hosts

$ sysctl kernel.hostname=master.localdomain # 不重啟情況下使內核修改生效

5、關閉swapoff

swapoff -a

四、軟件安裝配置

我們知道 kubernetes 環境底層是依賴 Docker 的,所以這裡軟件安裝包括了 Docker 安裝, kubelet、kubeadm、kubectl 組件安裝,以及一些初始化配置工作。

Master 和 Node 節點由於分工不一樣,所以安裝的服務不同,最終安裝完畢,Master 和 Node 啟動的核心服務分別如下:

Centos 7 搭建最新版 Kubernetes(10.1)集群

五、鏡像準備

針對國內鏡像環境,我指定了一個腳本,執行該腳本即可,pull 不下來多執行幾次就好了

#!/bin/bash

images=(kube-proxy-amd64:v1.10.1 kube-scheduler-amd64:v1.10.1 kube-controller-manager-amd64:v1.10.1 kube-apiserver-amd64:v1.10.1

etcd-amd64:3.2.18 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.10 k8s-dns-kube-dns-amd64:1.14.10

k8s-dns-dnsmasq-nanny-amd64:1.14.10)

for imageName in ${images[@]} ; do

docker pull longhuixuan/$imageName

docker tag longhuixuan/$imageName k8s.gcr.io/$imageName

docker rmi longhuixuan/$imageName

done

六、安裝 Docker

每臺機器都需要安裝 Docker,我這裡安裝的是1.13版本。

$ yum install -y docker

# 設置開啟啟動並啟動服務

$ systemctl enable docker && systemctl start docker

如出現以下錯誤

Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in docker (--selinux-enabled=false)

vim /etc/sysconfig/docker

# Modify these options if you want to change the way the docker daemon runs

OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'

if [ -z "${DOCKER_CERT_PATH}" ]; then

DOCKER_CERT_PATH=/etc/docker

fi

修改Docker cgroup 的驅動為 cgroupfs

$ vim /usr/lib/systemd/system/docker.service

cgroupdriver=cgroupfs

七、安裝並配置 kubernetes 組件

需要安裝的 kubernetes 組件主要有 kubelet、kubeadm、kubectl 這幾個。針對可以翻牆的用戶可以 yum 配置 kubernetes 官方源:

vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

#gpgcheck=1

gpgcheck=0

#設置完成後,安裝kubelet、kubeadm、kubectl 組件

$ yum install -y kubelet kubeadm kubectl

# 設置開機啟動,以及啟動各組件

$ systemctl enable kubelet && systemctl start kubelet

安裝完畢後,我們還需要配置一下 kubelet,主要修改配置文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf中的 KUBELET_CGROUP_ARGS=cgroupfs配置。

這裡要特別強調一下,一定要修改kubelet 和 docker 的驅動為cgroupfs,修改後 reload 一下服務

$ systemctl daemon-reload

八、初始化啟動 Master

kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.96.0.0/12

配置完主機後,我們可以啟動 Master 節點了。在執行初始化 init 時,kubernetes 並沒有選擇默認的 Pod Network,它支持很多種,這裡我們選擇 Flannel 作為 Pod Network,按照文檔說明,執行 init 時,需要帶上參數 --pod-network-cidr,即指定網絡區間,同時我們也可以通過 --kubernetes-version指定選擇 kubernetes 的版本號

九、在master 節點下安裝 Flannel 網絡組件

kubernetes 提供了很多種網絡組件選擇,有 Calia、Canal、Flannel、Kube-router、Romana、Weave Net 可以使用,具體使用可以參考 官方文檔 (3/4) Installing a pod network 來操作,這裡我們選擇 Flannel 作為網絡組件。

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

安裝完畢後,我們稍等一會再來查看下 pod 列表,看是不是都是Running狀態。

Centos 7 搭建最新版 Kubernetes(10.1)集群

十、安裝kubernates-dashboard

1、生成證書

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

openssl req -newkey rsa:4096 -nodes -sha256 -keyout weishuichao.key -out weishuichao.csr

openssl x509 -req -in weishuichao.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out weishuichao.crt

2、導入證書到kube-system

kubectl create secret generic kubernetes-dashboard-certs --from-file=/data/cert -n kube-system

3、創建kubernetes-dashboard.yaml

kubectl apply -f /data/k8s/kubernetes-dashboard.yaml

配置在官網的基礎上需要加上下面配置ClusterRoleBinding,用以配置權限,這樣通過token登陸進去才不至於沒有權限

# ------------------- Dashboard ClusterRoleBinding ------------------- #

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: kubernetes-dashboard

subjects:

- kind: ServiceAccount

name: kubernetes-dashboard

namespace: kube-system

roleRef:

kind: ClusterRole

name: cluster-admin

apiGroup: rbac.authorization.k8s.io

kubernetes採用暴露端口的方式使用,增加一下配置

Centos 7 搭建最新版 Kubernetes(10.1)集群

4、獲取kube-system 的secret

kubectl -n kube-system get secret

5、查看token,這個token 是用於登陸使用的

kubectl -n kube-system describe secret kubernetes-dashboard-token-2qmtr

6、訪問dashboard

https://192.168.2.107:31000 輸入令牌,進入dashboard主頁

Centos 7 搭建最新版 Kubernetes(10.1)集群

十一、建立機器互信

1、在每臺服務器需要建立主機互信的用戶名執行以下命令生成公鑰/密鑰,默認回車即可

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0c:1f:76:aa:80:b2:2f:b9:9a:6a:48:96:9d:8f:a1:cc root@cctvyyycns04The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . o . |
| . = + |
|. + o S |
| * + . . |
|B.. + . |
|+E . . |
|Oo. |
+-----------------+

2、互傳公鑰,第一次需要輸入密碼,之後就OK了

$ ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

可以看到是在.ssh/下生成了個authorized_keys的文件,記錄了能登陸這臺服務器的其他服務器的公鑰

3、測試是否能登陸

$ ssh 192.168.199.132

十二、生成join token

kubeadm token create --print-join-command

把Node加入到master中去

kubeadm join 192.168.2.107:6443 --token uakb7l.mg4j5vprx87o1w4c --discovery-token-ca-cert-hash sha256:a0f50e9bb2fe44511b2ad068e65a1c903ab08cac0aa4329a0c1c70aff57b9cc0


分享到:


相關文章: