Kubernetes從1.3開始引入kubeadm來試圖簡化其複雜的安裝。 但kubeadm至今仍不穩定, 而且我個人覺得kubeadm反而麻煩, 還不如直接用腳本或者其他自動化工具來安裝來的利索。 關於kubeadm配置master的ha, 也有相應的替代方案, 比如使用keepalived或者corosync等高可用集群軟體。 所以在這篇文檔中, 我還是會使用傳統的方式來安裝kubernetes集群
Kubernetes依賴於docker和etcd, docker的網路, 在這裡直接使用flannel。 在這篇文檔裡, 不會對master的高可用做過多的闡述, 我們先簡單的建立一個基本可用最小化集群。 我這裡使用的三台CentOS 7.2的伺服器, 各伺服器角色介紹如下:
10.5.10.116 server-116 master節點、node節點、etcd節點 10.5.10.117 server-117 node節點、etcd節點 10.5.10.131 server-131 node節點、etcd節點需要說明的是,
1、安裝並啟動docker
docker的安裝比較簡單, 直接使用yum安裝即可:
yum install -y docker systemctl start docker systemct enable docker2、安裝etcd
在所有節點上執行如下安裝操作:
yum install -y etcd修改/etc/etcd/etcd.conf設定檔如下:
ETCD_NAME=server-116 #etcd的名稱, 可以設置為各節點的主機名稱 ETCD_DATA_DIR="/data/etcd" ETCD_LISTEN_PEER_URLS="http://10.5.10.116:2380" ETCD_LISTEN_CLIENT_URLS="http://10.5.10.116:2379,http://127.0.0.1:2379" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.5.10.116:2380" ETCD_INITIAL_CLUSTER="server-116=http://10.5.10.116:2380,server-117=http://10.5.10.117:2380,server-131=http://10.5.10.131:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_ADVERTISE_CLIENT_URLS="http://10.5.10.116:2379"創建etcd的資料存儲目錄:
mkdir -p /data/etcd修改etcd的開機檔案/usr/lib/systemd/system/etcd.service, 因為默認通過yum安裝的etcd的啟動項不適用於etcd集群, 修改部分內容如下:
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name="${ETCD_NAME}" --data-dir="${ETCD_DATA_DIR}" --listen-client-urls="${ETCD_LISTEN_CLIENT_URLS}" --initial-advertise-peer-urls="${ETCD_INITIAL_ADVERTISE_PEER_URLS}" --listen-peer-urls="${ETCD_LISTEN_PEER_URLS}" --initial-cluster="${ETCD_INITIAL_CLUSTER}" --advertise-client-urls="${ETCD_ADVERTISE_CLIENT_URLS}" --initial-cluster-token="${ETCD_INITIAL_CLUSTER_TOKEN}" --initial-cluster-state="${ETCD_INITIAL_CLUSTER_STATE}""啟動etcd:
systemctl start etcd systemct enable etcd查看etcd集群狀態:
48a6ea53479805ea: name=etcd1 peerURLs=http://10.5.10.116:2380 clientURLs=http://10.5.10.116:2379 isLeader=true 7760fc31c2c1eeb1: name=etcd2 peerURLs=http://10.5.10.117:2380 clientURLs=http://10.5.10.117:2379 isLeader=false f12c14665e56ea5e: name=etcd3 peerURLs=http://10.5.10.131:2380 clientURLs=http://10.5.10.131:2379 isLeader=false3、配置flannel
先在etcd中註冊flannel子網:
etcdctl set /coreos.com/network/config '{"network": "172.16.0.0/16"}'在所有節點安裝flannel:
yum install -y flannel修改flannel設定檔/etc/sysconfig/flanneld如下:
FLANNEL_ETCD="http://10.5.10.116:2379,http://10.5.117:2379,http://10.5.131:2379" FLANNEL_ETCD_KEY="/coreos.com/network"啟動flannel:
systemctl start flanneld systemctl enable flanneld需要說明的是, 如果要讓docker使用flannel的網路, docker必須要後於flannel啟動, 所以需要重新開機docker:
systemctl restart docker4、安裝kubernetes服務端
我這裡使用的是網上別人提供的私有的kubernetes的yum源, 如下:
vim /etc/yum.repos.d/kube.repo [kube] name=Mritd Repository baseurl=https://yum.mritd.me/centos/7/x86_64 enabled=1 gpgcheck=1 gpgkey=https://mritd.b0.upaiyun.com/keys/rpm.public.key yumdownloader kubernetes-master kubernetes-client kubernetes-node修改kubernetes master上的設定檔如下:
vim /etc/kubernetes/config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://10.5.10.116:8080" vim /etc/kubernetes/apiserver KUBE_API_ADDRESS="--address=0.0.0.0" KUBE_API_PORT="--port=8080 --secure-port=443" KUBE_MASTER="--master=http://10.5.10.116:8080" KUBELET_PORT="--kubelet-port=10250" KUBE_ETCD_SERVERS="--etcd-servers=http://10.5.10.116:2379,http://10.5.10.117:2379,http://10.5.10.131:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"啟動kubernetes master:
systemctl start kube-apiserver kube-controller-manager kube-scheduler systemctl enable kube-apiserver kube-controller-manager kube-scheduler5、安裝kubernetes node端
yum install -y kubernetes-node修改node的設定檔:
啟動node端:
systemctl start kubelet kube-proxy systemctl enable kubelet kube-proxy最後通過在kubernetes master上通過kubectl查看各節點是否正常:
[root@server-116 ~]# kubectl get nodes NAME STATUS AGE server-116 Ready 1d server-117 Ready 1d server-131 Ready 1d至此, 完成kubernetes 1.5的基本安裝