基於 CentOS7 的 Kubernetes 集群


一、環境

相關主機

  • master
    • 192.168.12.197
  • minion
    • 192.168.12.198~232
  • etcd
    • 192.168.12.233~236

相關軟件

  • OS
    • CentOS 7
  • 軟件版本:
    • kubernetes-0.19.3
    • etcd-2.0.9-2.el7.x86_64
    • docker-1.6.0-11.0.1.el7.centos.x86_64
    • flannel-0.2.0-7.el7.x86_64

二、部署和配置

2.1 Prerequisites

systemctl stop firewalld systemctl disable firewalld 
yum -y install ntp systemctl start ntpd systemctl enable ntpd 

2.2 etcd Cluster

etcd 官方文檔 Clustering Guide 定義集群有三種方式,本示例采用 Static 方法。

yum install etcd -y 
  • paas-ci-etcd1
    • 192.168.12.233
  • paas-ci-etcd2
    • 192.168.12.234
  • paas-ci-etcd3
    • 192.168.12.235
  • paas-ci-etcd4
    • 192.168.12.236

這里以 192.168.12.234 為例,配置文件修改如下:

# grep -vE '^$|^#' /etc/etcd/etcd.conf ETCD_NAME=paas-ci-etcd2 # 不同的 etcd 主機定義不同的 NAME ETCD_DATA_DIR="/var/lib/etcd/paas-ci-etcd2.etcd" # 定義 etcd 存儲的數據目錄 ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" # 定義 peer 綁定端口,即內部集群通信端口 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:4001" # 定義 client 綁定端口,即 client 訪問通信端口 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.12.234:2380" # 定義 etcd peer 初始化廣播端口 ETCD_INITIAL_CLUSTER="paas-ci-etcd1=http://192.168.12.233:2380,paas-ci-etcd2=http://192.168.12.234:2380,paas-ci-etcd3=http://192.168.12.235:2380,paas-ci-etcd4=http://192.168.12.236:2380" # ETCD_INITIAL_CLUSTER 定義集群成員 ETCD_INITIAL_CLUSTER_STATE="new" # 初始化狀態使用 new,建立之后改此值為 existing ETCD_INITIAL_CLUSTER_TOKEN="dev-etcd-cluster" # etcd 集群名 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.12.234:4001" # 定義 client 廣播端口,此處必須填寫相應主機的 IP,不能填寫 0.0.0.0,否則 etcd client 獲取不了 etcd cluster 中的主機 

配置完成之后,啟動各主機 etcd

systemctl enable etcd systemctl start etcd 

查看當前集群成員

# etcdctl member list a340818d006c60f: name=paas-ci-etcd1 peerURLs=http://192.168.12.233:2380 clientURLs=http://0.0.0.0:4001 3045ba54dbc291dd: name=paas-ci-etcd4 peerURLs=http://192.168.12.236:2380 clientURLs=http://0.0.0.0:4001 75b057b0086f534b: name=paas-ci-etcd2 peerURLs=http://192.168.12.234:2380 clientURLs=http://0.0.0.0:4001 84562a66304940a1: name=paas-ci-etcd3 peerURLs=http://192.168.12.235:2380 clientURLs=http://0.0.0.0:4001 

配置 flannel 通信網段

# etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16"}' # etcdctl get /coreos.com/network/config {"Network":"172.17.0.0/16"} 

2.3 K8s Master 安裝配置

yum -y install kubernetes 

注: CentOS7 源中最新版本是 0.15,如果需要使用最新的,替換 /usr/bin 下 K8s 的二進制文件即可。

Master 配置文件修改

$ grep -vE '^$|^#' /etc/kubernetes/apiserver KUBE_API_ADDRESS="--address=0.0.0.0" KUBE_API_PORT="--port=8080" KUBELET_PORT="--kubelet_port=10250" KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.12.233:4001,http://192.168.12.234:4001,http://192.168.12.235:4001,http://192.168.12.236:4001" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission_control=NamespaceAutoProvision,LimitRanger,ResourceQuota" KUBE_API_ARGS="" 

啟動相關服務

for SERVICES in kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done 

2.4 K8s Minions 安裝配置

yum -y install kubernetes docker flannel bridge-utils 

Minion 配置文件修改

# grep -vE '^$|^#' /etc/kubernetes/config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow_privileged=false" KUBE_MASTER="--master=http://192.168.12.197:8080" # 指定 master 主機 IP 
# grep -vE '^$|^#' /etc/kubernetes/kubelet KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_PORT="--port=10250" KUBELET_HOSTNAME="--hostname_override=192.168.12.198" # 根據實際的 minion 對於 hostname 或者 IP 修改 KUBELET_API_SERVER="--api_servers=http://192.168.12.197:8080" # 指定 master 主機 IP KUBELET_ARGS="--pod-infra-container-image=your_regestry_url:5000/google_containers/pause:0.8.0" # 指定私有 registry pull pause image 

注: pause:0.8.0 因為 Google 被 GFW 屏蔽,所以該鏡像需要翻牆下載,下載不了的可以聯系我^_^

# grep "FLANNEL_ETCD=" /etc/sysconfig/flanneld FLANNEL_ETCD="http://192.168.12.233:4001,http://192.168.12.234:4001,http://192.168.12.235:4001,http://192.168.12.236:4001" 
# cat /usr/lib/systemd/system/kubelet.service ... ... [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=-/etc/kubernetes/config EnvironmentFile=-/etc/kubernetes/kubelet ExecStart=/usr/bin/kubelet \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBELET_API_SERVER \ $KUBELET_ADDRESS \ $KUBELET_PORT \ $KUBELET_HOSTNAME \ $KUBE_ALLOW_PRIV \ $KUBELET_ARGS LimitNOFILE=65535 # 設置 limit 限制 LimitNPROC=10240 Restart=on-failure ... ... 

注: docker、kube-proxy 這些默認已經設置好相應的 limit,無需再次修改

啟動相關服務

systemctl daemon-reload
for SERVICES in kube-proxy kubelet flanneld docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done 

如果出現 docker0 和 flannel 設置的 IP 地址不同,則可以采取如下方式修改:

systemctl stop docker ifconfig docker0 down brctl delbr docker0 systemctl start docker 

三、集群狀態

3.1 K8s Master

設置對於 nodes 的 label [目前環境有 dev 和 fat 兩種]

kubectl label nodes 192.168.12.198 usetype=dev 

關於 nodes label 具體可參考 Node selection example

# kubectl get nodes NAME LABELS STATUS 192.168.12.198 kubernetes.io/hostname=192.168.12.198,usetype=dev Ready 192.168.12.199 kubernetes.io/hostname=192.168.12.199,usetype=dev Ready 192.168.12.200 kubernetes.io/hostname=192.168.12.200,usetype=dev Ready 192.168.12.201 kubernetes.io/hostname=192.168.12.201,usetype=fat Ready 192.168.12.202 kubernetes.io/hostname=192.168.12.202,usetype=fat Ready 192.168.12.203 kubernetes.io/hostname=192.168.12.203,usetype=fat Ready ... ... 

3.2 etcd 集群

# etcdctl --peers 192.168.12.235:4001 member list a340818d006c60f: name=paas-ci-etcd1 peerURLs=http://192.168.12.233:2380 clientURLs=http://0.0.0.0:4001 3045ba54dbc291dd: name=paas-ci-etcd4 peerURLs=http://192.168.12.236:2380 clientURLs=http://0.0.0.0:4001 75b057b0086f534b: name=paas-ci-etcd2 peerURLs=http://192.168.12.234:2380 clientURLs=http://0.0.0.0:4001 84562a66304940a1: name=paas-ci-etcd3 peerURLs=http://192.168.12.235:2380 clientURLs=http://0.0.0.0:4001 

3.3 Other

其它可以測試 pods、rc、service,這里不作介紹了,官方 github 上有相應的對應實例,0.19.3 直接使用 V1 的接口即可。

四、參考

–EOF–


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM