1. 程式人生 > 其它 >搭建 kubernetes 叢集

搭建 kubernetes 叢集

技術標籤:r容器管理kubernetesk8s

參考:https://blog.csdn.net/u010039418/article/details/90235873

1. 環境準備

我準備了3臺 centos7.9 的虛擬機器,1核3g的配置。分別是:192.168.56.104(master),192.168.56.102(node1),192.168.56.105(node2)

安裝Docker和K8S叢集的伺服器作業系統版本需要在CentOS 7以上。

關閉防火牆

$ systemctl stop firewalld    # 關閉防火牆

$ systemctl disable firewalld    # 禁止開機啟動

master 節點安裝配置 etcd

安裝採用yum方式,並且只是安裝單機的etcd服務,如果考慮高可用需要部署etcd叢集。

$ yum install -y etcd

安裝完成後,覆蓋如下配置:vim /etc/etcd/etcd.conf

# 節點名稱
ETCD_NAME="master"

# 資料儲存目錄
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

# 與客戶端(etcdctl、curl)通訊時的監聽地址列表
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

# 對外公告的該節點客戶端監聽地址,配置的是 master 地址
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.104:2379"

配置完啟動etcd服務,並配置開機啟動:

$ systemctl start etcd
$ systemctl enable etcd

檢視etcd健康狀態,確定etcd服務狀態正常,

[[email protected] etcd]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.56.104:2379
cluster is healthy

安裝Docker

$ yum install -y docker    # yum安裝docker

vim /etc/docker/daemon.json,新增docker國內映象庫和國內映象加速器站點(這是我自己的阿里加速站點,可以自行百度解決)。

# 重新載入docker配置,重啟docker

$ systemctl start docker

$ systemctl enable docker    #把docker服務放到開機啟動

2. 搭建kubernetes叢集

2.1、部署master節點(192.168.56.104)

在 master 節點機器上安裝k8s

yum install -y kubernetes

在k8s master節點上需要執行以下3個元件:

  1. Kubernetes API Server:提供http restful介面服務,也是叢集控制入口
  2. Kubernetes Controller Manager:資源物件控制中心
  3. Kubernetes Scheduler:負責pod的排程

配置 kube-apiserver 服務,修改 /etc/kubernetes/apiserver 如下:

# 配置apiserver服務繫結的不安全ip(要改)
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

# 配置apiserver服務埠,預設情況下,8080用於接收http請求,6443用於接收https請求
KUBE_API_PORT="--port=8080"

# 配置etcd叢集管理服務地址(要改)
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.56.104:2379"

# 配置叢集使用的虛擬IP池
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

# 配置RESTFUL API 准入選項
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

修改 /etc/kubernetes/config 配置,除了KUBE_MASTER,其餘均保持預設即可:

# 設定日誌輸出
KUBE_LOGTOSTDERR="--logtostderr=true"

# 日誌級別
KUBE_LOG_LEVEL="--v=0"

# 是否允許特權
KUBE_ALLOW_PRIV="--allow-privileged=false"

# 設定master節點apiserver地址(要改)
KUBE_MASTER="--master=http://192.168.56.104:8080"

對於 kube-controller-manager 和 kube-scheduler 兩個服務,無需其他配置,按照系統預設引數即可。

啟動服務,並設定開機啟動。

$ systemctl enable kube-apiserver kube-controller-manager kube-scheduler

$ systemctl start kube-apiserver kube-controller-manager kube-scheduler

2.2、部署node節點(192.168.56.102,192.168.56.104)

在node節點機器上安裝k8s

yum install -y kubernetes

對於node節點,需要執行以下元件

  1. kubelet:負責pod上容器的建立、啟停,並與master節點共同實現叢集管理
  2. kube-proxy:實現服務的通訊和負載均衡

配置kubelet,修改 /etc/kubernetes/kubelet 配置:

# 設定kubelet繫結ip
KUBELET_ADDRESS="--address=0.0.0.0"

# 設定當前節點的hostname,記得不要重複
KUBELET_HOSTNAME="--hostname-override=192.168.56.102"

# 設定master節點上的apiserver的地址
KUBELET_API_SERVER="--api-servers=http://192.168.56.104:8080"

# 設定基礎映象拉取地址,上面這個地址我根據docker pull命令拉不下來。下面那個映象地址是我用docker search 搜到的
# KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=tianyebj/pod-infrastructure:latest"

KUBELET_ARGS=""

配置基礎映象拉取地址時,上面那個類似於官方地址的。我docker pull失敗,所以又重新搜了一個。可以看下圖結果:

修改 /etc/kubernetes/config 檔案如下,配置和master節點上相同:

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.56.104:8080"

kube-proxy服務無需其他配置。

啟動 kubelet、kube-proxy 服務,並設定開機啟動:

$ systemctl start kubelet kube-proxy

$ systemctl enable kubelet kube-proxy

如果節多,可以考慮使用ansible批量部署。

第2臺node節點機器配置步驟相同。等兩個node節點部署完成,我們在 master 上檢視節點資訊,如下:

3. 所有節點安裝配置flannel

flannel的安裝是為了解決跨主機容器間的通訊。

3.1、在 master 和 node 節點上執行以下操作

$ yum install -y flannel

修改配置 /etc/sysconfig/flanneld 如下,

# 設定master節點的etcd服務地址
FLANNEL_ETCD_ENDPOINTS="http://192.168.56.104:2379"

# 設定etcd變數訪問字首
FLANNEL_ETCD_PREFIX="/flannel/network"

3.2、在master節點上新增網路

master 上配置有etcd服務,因此我們使用etcdctl命令設定該叢集的網路資訊。

etcdctl set /flannel/network/config '{"Network":"10.8.0.0/16"}'

其中,/flannel/network/ 和上面的 FLANNEL_ETCD_PREFIX 對應。

3.3、重啟master和node節點上各個服務

由於flannel會將docker0覆蓋,因此需要重啟docker服務。

重啟 master 服務

$ systemctl restart docker kube-apiserver kube-controller-manager kube-scheduler

重啟 node 服務

$ systemctl restart docker kube-proxy kubelet

3.4、所有節點啟動flannel服務,並設定開啟啟動

$ systemctl restart flanneld

$ systemctl enable flanneld

啟動後就能看到節點上的flannel網路,並且該網路正是我們配置的ip範圍。


master節點上flannel資訊

node1節點上flannel資訊

總結

其實到這,k8s的叢集就搭建完了,但這只是最簡單的一個叢集,並沒有考慮叢集的高可用。

因此,實際的叢集還需要以下操作:

  1. 針對etcd進行叢集化,保證高可用
  2. 針對master節點進行擴充,避免單點故障