k8s + Docker 搭建實錄和問題總結

  • 2019 年 10 月 8 日
  • 筆記

最近看了<<kubernetes 權威指南>> 這本書,也想著照著書中範例搭建一個k8s集群。書中的例子是在單機跑起來的,也有點年代了,完全照著書中範例配置遇到了不少問題,搭建前前後後花了好幾天的休息時間才弄好。 因此把過程中的問題整理出來,方便後續重新搭建的時候能夠有坑可循。自己也想過搞個一鍵搭建腳本,但是作為k8s入門,還是需要自己親手一步步操作過來,才能有所收穫。

k8s權威指南書里介紹的是如何在單機上搭建k8s的,比較簡單,我這邊搭建的是集群模式。 將k8s的master以及node分別部署在不同的機子上。

其中master的進程如下所述:

master進程

node上的進程如下所述:

node進程

搭建環境注意項:

  1. master 如果不用來部署node的話,至少是1個CPU 1GB的硬體配置。
  2. node CPU 1核,但是記憶體至少要2G以上,否則會導致node節點起的容器頻繁誘發OOMKill,和頻繁的swap導致結點卡頓無法操作

下面是在Centos 7.5 版本下搭建的具體步驟:

關閉防火牆,關閉senlinux。 防火牆會導致後面對外暴露服務的時候攔截掉埠流量, master和node都得設置下

# systemctl stop firewalld  # systemctl disable firewalld  # setenforce 0  # sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux

搭建master

# yum -y install etcd kubernetes

配置etcd 和apiserver

#vim /etc/etcd/etcd.conf    ETCD_NAME=default  ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"  ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
vim /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://127.0.0.1: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=""

啟動master上的服務進程:

#!/bin/sh     for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler;   do    systemctl restart $SERVICES    systemctl enable $SERVICES    systemctl status $SERVICES   done  

設置etcd網路:

etcdctl set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

到這裡,master的配置就完成

接下來進行node的配置

按照必要的包

# yum -y install flannel kubernetes

設置node連接master的配置

vim /etc/kubernetes/config    KUBE_MASTER="--master=http://${master ip}:8080"  KUBE_ETCD_SERVERS="--etcd_servers=http://${master ip}:2379"    這裡需要將${master ip} 替換成master的ip
vim /etc/kubernetes/kubelet    KUBELET_PORT="--port=10250"  # change the hostname to this host』s IP address  KUBELET_HOSTNAME="--hostname_override=${local ip}"  KUBELET_API_SERVER="--api_servers=http://${master ip}:8080"  KUBELET_ARGS=""    這裡需要將${local ip} 替換為node本機ip  ${master ip} 替換為master的ip  
#vim /etc/sysconfig/flanneld  FLANNEL_ETCD_ENDPOINTS="http://${master ip}:2379"  FLANNEL_ETCD_PREFIX="/atomic.io/network"     這裡需要將${master ip} 替換成master的ip 

在console執行以下指令清理docker0網路配置:

 ip link delete docker0

啟動node結點的服務

#!/bin/sh   for SERVICES in flanneld kube-proxy kubelet docker;  do   systemctl restart $SERVICES   systemctl enable $SERVICES   systemctl status $SERVICES  done  

這個時候,在master上執行kubectl get nodes。如果配置成功即可查看到如下資訊

[root@VM_0_3_centos k8s]# kubectl get nodes  NAME            STATUS    AGE  49.235.XX.XX   Ready     9d  [root@VM_0_3_centos k8s]#