環境准備
集群數量此次使用3台CentOS 7系列機器,分別為7.3,7.4,7.5
節點名稱 節點IP
master 192.168.0.100
node1 192.168.0.101
node2 192.168.0.102
主要事項
1、master節點安裝配置etcd服務,作為k8s集群主數據庫,保存所有資源的信息
2、所有節點安裝配置k8s服務,針對master和node分別配置各項服務
3、所有節點安裝配置flannel服務,用於跨主機容器間通信
前提
關閉防火牆,否則節點間無法通信,使用以下命令關閉防火牆和禁止開機啟動。
systemctl stop firewalld.service
systemctl disable firewalld.service
master節點安裝配置etcd
安裝采用yum方式,並且只是安裝單機的etcd服務,如果考慮高可用需要部署etcd集群。
yum install -y etcd
安裝完成后,/etc/etcd/etcd.conf配置文件作如下配置,
ETCD_NAME="master" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.100:2379"
其中,
ETCD_NAME:節點名稱
ETCD_DATA_DIR:數據存儲目錄
ETCD_LISTEN_CLIENT_URLS:與客戶端(etcdctl、curl)通信時的監聽地址列表
ETCD_ADVERTISE_CLIENT_URLS:對外公告的該節點客戶端監聽地址
配置完啟動etcd服務,並配置開機啟動,
systemctl start etcd
systemctl enable etcd
查看etcd健康狀態,確定etcd服務狀態正常,
[root@master~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.0.100:2379 cluster is healthy
所有節點安裝配置K8S
1、master節點
在master節點機器上安裝k8s,同樣使用yum方式,
yum install -y kubernetes
在k8s master節點上需要運行以下組件:
Kubernetes API Server:提供http restful接口服務,也是集群控制入口
Kubernetes Controller Manager:資源對象控制中心
Kubernetes Scheduler:負責pod的調度
配置kube-apiserver服務,修改/etc/kubernetes/apiserver文件如下:
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" KUBE_API_PORT="--port=8080" KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.100:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" KUBE_API_ARGS=""
其中,
KUBE_API_ADDRESS:配置apiserver服務綁定的不安全ip
KUBE_API_PORT:配置apiserver服務端口,默認情況下,8080用於接收http請求,6443用於接收https請求
KUBE_ETCD_SERVERS:配置etcd服務ip
KUBE_SERVICE_ADDRESSES:配置集群使用的虛擬IP池
KUBE_ADMISSION_CONTROL:配置RESTFUL API 准入選項
修改/etc/kubernetes/config文件如下:
KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://192.168.0.100:8080"
其中,
KUBE_LOGTOSTDERR:設置日志輸出
KUBE_LOG_LEVEL:設置日志級別
KUBE_ALLOW_PRIV:設置是否允許特權
KUBE_MASTER:設置master節點apiserver地址
除了KUBE_MASTER需要配置,其余均保持默認設置即可。
對於kube-controller-manager和kube-scheduler兩個服務,無需其他配置,按照系統默認參數即可。
設置kube-apiserver、kube-controller-manager和kube-scheduler服務開啟啟動,並啟動服務,
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
systemctl start kube-apiserver kube-controller-manager kube-scheduler
2、node節點
在node節點機器上安裝k8s,仍然使用yum方式,
yum install -y kubernetes
對於node節點,需要運行以下組件
kubelet:負責pod上容器的創建、啟停,並與master節點共同實現集群管理
kube-proxy:實現服務的通信和負載均衡
上面我們提到,node也需要安裝kubernetes,因此我們直接開始配置。
配置kubelet,修改/etc/kubernetes/kubelet文件如下:
KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_HOSTNAME="--hostname-override=192.168.52.145" KUBELET_API_SERVER="--api-servers=http://192.168.52.136:8080" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_ARGS=""
其中,
KUBELET_ADDRESS:設置kubelet綁定ip
KUBELET_HOSTNAME:設置當前節點的hostname,記得不要重復了
KUBELET_API_SERVER:設置master上apiserver的ip地址
KUBELET_POD_INFRA_CONTAINER:設置基礎鏡像拉取地址,如果訪問不了換個國內的地址
修改/etc/kubernetes/config文件如下:
KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://192.168.0.100:8080"
該配置和master節點上相同。
kube-proxy服務無需其他配置。
啟動kubelet、kube-proxy服務,並設置為開啟動,
systemctl start kubelet kube-proxy
systemctl enable kubelet kube-proxy
同樣的操作在另一個節點配置。如果節多,可以考慮使用ansible批量部署。
部署完node節點,我們就能在master上查看節點信息了。
[root@master ~]# kubectl get node NAME STATUS AGE 192.168.0.101 Ready 11s 192.168.0.102 Ready 8s
所有節點安裝配置flannel
flannel的安裝是為了解決跨主機容器間的通信。
1、在master和node節點上執行以下操作
安裝flannel
yum install -y flannel
修改配置文件/etc/sysconfig/flanneld如下,
FLANNEL_ETCD_ENDPOINTS="http://192.168.0.100:2379" FLANNEL_ETCD_PREFIX="/flannel/network"
其中,
FLANNEL_ETCD_ENDPOINTS:設置etcd的訪問URL
FLANNEL_ETCD_PREFIX:設置etcd變量前綴
2、在master節點上添加網絡
master上配置有etcd服務,因此我們使用etcdctl命令設置該集群的網絡信息。
etcdctl set /flannel/network/config '{"Network":"10.8.0.0/16"}'
其中,/flannel/network/和上面的FLANNEL_ETCD_PREFIX對應。
3、重啟master和node節點上各個服務
由於flannel會將docker0覆蓋,因此需要重啟docker服務。
對於master,
systemctl restart docker kube-apiserver kube-controller-manager kube-scheduler
對於node,
systemctl restart kube-proxy kubelet docker
4、所有節點啟動flannel服務,並設置開啟啟動
systemctl restart flanneld
systemctl enable flanneld
啟動后就能看到節點上的flannel網絡,並且該網絡正是我們配置的ip范圍。
master節點上flannel信息,
[root@master ~]# ifconfig flannel0 flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472 inet 10.8.71.0 netmask 255.255.0.0 destination 10.8.71.0 inet6 fe80::186f:8899:a84e:d447 prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3 bytes 144 (144.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
node1節點上flannel信息,
[root@node1 ~]# ifconfig flannel0 flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472 inet 10.8.21.0 netmask 255.255.0.0 destination 10.8.21.0 inet6 fe80::8597:702b:ee1a:db51 prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3 bytes 144 (144.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
總結
其實到這,k8s的集群就搭建完了,但這只是最簡單的一個集群,並沒有考慮集群的高可用。
因此,實際的集群還需要以下操作:
針對etcd進行集群化,保證高可用
針對master節點進行擴充,避免單點故障
————————————————
版權聲明:本文為CSDN博主「Blue summer」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u010039418/article/details/90235873