螃蟹|2016年4月17日
環境:
etcd01:192.168.12.37,centos7.1
etcd02:192.168.12.178,centos7.1
etcd03:192.168.12.179,centos7.1
軟件版本:
etcd:2.2.5
實施步驟:
以etcd1部署爲例,其他2個主機步驟一樣:
安裝etcd
[root@docker-registry~]# yum install etcd -y
修改配置文件
[root@docker-registry~]# grep -v '^#' /etc/etcd/etcd.conf
ETCD_NAME=etcd01
ETCD_DATA_DIR="/var/lib/etcd/etcd01"
ETCD_LISTEN_PEER_URLS="http://192.168.12.37:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.12.37:2379,http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.12.37:2380"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.12.37:2380,etcd02=http://192.168.12.178:2380,etcd03=http://192.168.12.179:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-00"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.12.37:2379"
其它兩個主機的修改內容爲以上紅色的部分,其它不能變。/var/lib/etcd/etcd01目錄會自己啓動時建立,不能提前建立。
修改etcd啓動文件
[root@docker-registry~]# more /usr/lib/systemd/system/etcd.service
[Unit]
Description=EtcdServer
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
# setGOMAXPROCS to number of processors
ExecStart=/bin/bash-c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\"\
--data-dir=\"${ETCD_DATA_DIR}\" \
--listen-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" \
--listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\"\
--advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\"\
--initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\"\
--initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" \
--initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\""
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
啓動etcd服務
[root@docker-registryetcd]# systemctl start etcd
[root@docker-registryetcd]# systemctl status etcd
重複上述步驟,配置etcd02和etcd03.
三個主機的etcd服務全部啓動後,查看cluster狀態
[root@docker-registryetcd]# etcdctl cluster-health
Memberxxx is healthy…
[root@docker-registryetcd]# etcdctl memberlist
49ce2446964e72e3:name=etcd01 peerURLs=http://192.168.12.37:2380clientURLs=http://192.168.12.37:2379
742a07d658e2e113:name=etcd02 peerURLs=http://192.168.12.178:2380clientURLs=http://192.168.12.178:2379
eb6e0867bfd315e5:name=etcd03 peerURLs=http://192.168.12.179:2380clientURLs=http://192.168.12.179:2379
[root@docker-registryetcd]# etcdctl cluster-health
member49ce2446964e72e3 is healthy: got healthy result fromhttp://192.168.12.37:2379
member742a07d658e2e113 is healthy: got healthy result fromhttp://192.168.12.178:2379
membereb6e0867bfd315e5 is healthy: got healthy result fromhttp://192.168.12.179:2379
clusteris healthy
至此,etcd集羣配置完成。
接下來,將當前環境的etcd換成etcd集羣。
停止master的etcd
[root@k8s_master~]# systemctl stop etcd
[root@k8s_master~]# systemctl status etcd
將master的apiserver中etcd的配置指向etcd集羣
[root@k8s_masterkubernetes]# vi apiserver
# Commaseparated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.12.37:2379,http://192.168.12.178:2379,http://192.168.12.179:2379"
重啓master各組件
[root@k8s_masterkubernetes]# systemctl restart kube-apiserverkube-controller-manager kube-scheduler
[root@k8s_masterkubernetes]# systemctl status kube-apiserverkube-controller-manager kube-scheduler
重啓node各組件
[root@k8s_node01~]# systemctl restart docker kubelet kube-proxy
[root@k8s_node01~]# systemctl status docker kubelet kube-proxy
[root@k8s_node02~]# systemctl restart docker kubelet kube-proxy
[root@k8s_node02~]# systemctl status docker kubelet kube-proxy
查看node節點狀態
[root@k8s_masterkubernetes]# kubectl get node
NAME LABELS STATUS AGE
192.168.12.175 kubernetes.io/hostname=192.168.12.175 Ready 47s
192.168.12.176 kubernetes.io/hostname=192.168.12.176 Ready 9s
新建pod進行測試
[root@k8s_masterpods]# kubectl create -f frontend-controller.yaml
replicationcontroller"frontend" created
[root@k8s_masterpods]# kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-40ec5 1/1 Running 0 5s
frontend-43khv 1/1 Running 0 5s
[root@k8s_masterpods]# kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE
frontend frontend kubeguide/guestbook-php-frontend name=frontend 2 9s
etcd集羣測試
1.關閉一臺主機的etcd服務
關閉etcd01的etcd服務
[root@docker-registry~]# systemctl stop etcd
[root@docker-registry~]# systemctl status etcd -l
查看cluster狀態
[root@kafka02etcd]# etcdctl cluster-health
failedto check the health of member 49ce2446964e72e3 onhttp://192.168.12.37:2379: Get http://192.168.12.37:2379/health:dial tcp 192.168.12.37:2379: connection refused
member49ce2446964e72e3 is unreachable: [http://192.168.12.37:2379] areall unreachable
member742a07d658e2e113 is healthy: got healthy result fromhttp://192.168.12.178:2379
membereb6e0867bfd315e5 is healthy: got healthy result fromhttp://192.168.12.179:2379
clusteris healthy
master查看原數據,依然存在
[root@k8s_masterpods]# kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE
frontend frontend kubeguide/guestbook-php-frontend name=frontend 2 4m
[root@k8s_masterpods]# kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-40ec5 1/1 Running 0 4m
frontend-43khv 1/1 Running 0 4m
再次新建pod,無異常。
[root@k8s_masterk8s]# kubectl create -f redis-master-controller.yaml
replicationcontroller"redis-master" created
[root@k8s_masterk8s]# kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE
frontend frontend kubeguide/guestbook-php-frontend name=frontend 2 5m
redis-master master kubeguide/redis-master name=redis-master 2 9s
[root@k8s_masterk8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-40ec5 1/1 Running 0 5m
frontend-43khv 1/1 Running 0 5m
redis-master-aj9q6 1/1 Running 0 13s
redis-master-dcrxe 1/1 Running 0 13s
2.關閉兩臺主機的etcd服務
再關閉etcd02的etcd服務,此時只有一臺etcd可用。
[root@kafka02etcd]# systemctl stop etcd
[root@kafka02etcd]# systemctl status etcd.service -l
查看cluster狀態,此時顯示cluster不可用。
[root@kafka03etcd]# etcdctl cluster-health
failedto check the health of member 49ce2446964e72e3 onhttp://192.168.12.37:2379: Get http://192.168.12.37:2379/health:dial tcp 192.168.12.37:2379: connection refused
member49ce2446964e72e3 is unreachable: [http://192.168.12.37:2379] areall unreachable
failedto check the health of member 742a07d658e2e113 onhttp://192.168.12.178:2379: Get http://192.168.12.178:2379/health:dial tcp 192.168.12.178:2379: connection refused
member742a07d658e2e113 is unreachable: [http://192.168.12.178:2379] areall unreachable
membereb6e0867bfd315e5 is unhealthy: got unhealthy result fromhttp://192.168.12.179:2379
clusteris unhealthy
master查看狀態,原pod無影響
[root@k8s_masterk8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-40ec5 1/1 Running 0 11m
frontend-43khv 1/1 Running 0 11m
redis-master-aj9q6 1/1 Running 0 6m
redis-master-dcrxe 1/1 Running 0 6m
[root@k8s_masterk8s]# kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE
frontend frontend kubeguide/guestbook-php-frontend name=frontend 2 16m
redis-master master kubeguide/redis-master name=redis-master 2 11m
但是已無法新建pod
[root@k8s_masterk8s]# kubectl create -f redis-master-service.yaml
Errorfrom server: error when creating "redis-master-service.yaml":Timeout: request did not complete within allowedduration
即etcd集羣,需要至少2個etcd節點纔可以正常工作。
本文結束。