標籤:kubernetes docker centos7
一、安裝前準備1.作業系統詳情需要三台主機,都迷你安裝 centos7.3,並update到最新cat /etc/redhat-releaseCentOS Linux release 7.3.1611 (Core) 角色主機名稱IPMaster master192.168.1.14node1 slave-1192.168.1.15node2slave-2192.168.1.162.在每台主機上關閉firewalld改用iptables輸入以下命令,關閉firewalldsystemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall開機啟動然後安裝iptables並啟用yum install -y iptables-services #安裝systemctl start iptables.service #最後重啟防火牆使配置生效systemctl enable iptables.service #設定防火牆開機啟動3.安裝ntp服務yum install -y ntpsystemctl start ntpdsystemctl enable ntpd二、安裝配置註:kubernetes,etcd等已經進去centos epel源,可以直接yum安裝(需要安裝epel-release)1.安裝Kubernetes Master使用以下命令安裝kubernetes 和 etcd# yum install -y kubernetes etcd編輯/etc/etcd/etcd.conf 使etcd監聽所有的ip地址,確保下列行沒有注釋,並修改為下面的值vim /etc/etcd/etcd.conf# [member]ETCD_NAME=defaultETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"ETCD_INITIAL_CLUSTER="default=http://192.168.1.14:2380"#[cluster]ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.14:2379"編輯Kubernetes API server的設定檔 /etc/kubernetes/apiserver,確保下列行沒有被注釋,並為下列的值vim /etc/kubernetes/apiserver#### kubernetes system config## The following values are used to configure the kube-apiserver## The address on the local server to listen to.KUBE_API_ADDRESS="--address=0.0.0.0"# The port on the local server to listen on.KUBE_API_PORT="--port=8080"# Port minions listen onKUBELET_PORT="--kubelet_port=10250"# Comma separated list of nodes in the etcd clusterKUBE_ETCD_SERVERS="--etcd_servers=http://192.168.1.14:2379"# Address range to use for servicesKUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"# default admission control policiesKUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"# Add your own!KUBE_API_ARGS=""啟動etcd, kube-apiserver, kube-controller-manager and kube-scheduler服務,並設定開機自啟vim /script/kubenetes_service.shfor SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES donesh /script/kubenetes_service.sh在etcd中定義flannel network的配置,這些配置會被flannel service下發到nodes:etcdctl mk /centos.com/network/config ‘{"Network":"172.17.0.0/16"}‘添加iptables規則,允許相應的連接埠iptables -I INPUT -p tcp --dport 2379 -j ACCEPTiptables -I INPUT -p tcp --dport 10250 -j ACCEPTiptables -I INPUT -p tcp --dport 8080 -j ACCEPTiptables-save或者寫入iptables設定檔 /etc/sysconfig/iptables查看節點資訊(我們還沒有配置節點資訊,所以這裡應該為空白)# kubectl get nodesNAME LABELS STATUS2. 安裝Kubernetes Minions (Nodes)註:下面這些步驟應該在minion1和minions2上執行(也可以添加更多的minions)使用yum安裝kubernetes 和 flannel# yum install -y flannel kubernetes為flannel service配置etcd伺服器,編輯/etc/sysconfig/flanneld檔案中的下列行以串連到master# vim /etc/sysconfig/flanneldFLANNEL_ETCD="http://192.168.1.14:2379" #改為etcd伺服器的ipFLANNEL_ETCD_PREFIX="/centos.com/network"編輯/etc/kubernetes/config 中kubernetes的預設配置,確保KUBE_MASTER的值是串連到Kubernetes master API server:# vim /etc/kubernetes/configKUBE_MASTER="--master=http://192.168.1.14:8080"編輯/etc/kubernetes/kubelet 如下行:node1:# vim /etc/kubernetes/kubeletKUBELET_ADDRESS="--address=0.0.0.0"KUBELET_PORT="--port=10250"KUBELET_HOSTNAME="--hostname_override=192.168.1.15"KUBELET_API_SERVER="--api_servers=http://192.168.1.14:8080"KUBELET_ARGS=""node2:# vim /etc/kubernetes/kubeletKUBELET_ADDRESS="--address=0.0.0.0"KUBELET_PORT="--port=10250"KUBELET_HOSTNAME="--hostname_override=192.168.1.16"KUBELET_API_SERVER="--api_servers=http://192.168.1.14:8080"KUBELET_ARGS=""啟動kube-proxy, kubelet, docker 和 flanneld services服務,並設定開機自啟for SERVICES in kube-proxy kubelet docker flanneld; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done在每個minion節點,你應當注意到你有兩塊新的網卡docker0 和 flannel0。你應該得到不同的ip位址範圍在flannel0上,就像下面這樣:node1:# ip a | grep flannel | grep inet inet 172.17.29.0/16 scope global flannel0node2:# ip a | grep flannel | grep inet inet 172.17.37.0/16 scope global flannel0添加iptables規則:iptables -I INPUT -p tcp --dport 2379 -j ACCEPTiptables -I INPUT -p tcp --dport 10250 -j ACCEPTiptables -I INPUT -p tcp --dport 8080 -j ACCEPT現在登陸kubernetes master節點驗證minions的節點狀態:# kubectl get nodesNAME LABELS STATUS192.168.1.15 kubernetes.io/hostname=192.168.1.15 Ready192.168.1.16 kubernetes.io/hostname=192.168.1.16 Ready至此,kubernetes叢集已經配置並運行了,我們可以繼續下面的步驟。三、建立 Pods (Containers)為了建立一個pod,我們需要在kubernetes master上面定義一個yaml 或者 json設定檔。然後使用kubectl命令建立pod# mkdir -p /k8s/pods# cd /k8s/pods/# vim nginx.yaml在nginx.yaml裡面增加如下內容:apiVersion: v1kind: Podmetadata: name: nginx labels: app: nginxspec: containers: - name: nginx image: nginx ports: - containerPort: 80建立pod:# kubectl create -f nginx.yaml此時有如下報錯:Error from server: error when creating "nginx.yaml": Pod "nginx" is forbidden: no API token found for service account default/default, retry after the token is automatically created and added to the service account解決辦法是編輯/etc/kubernetes/apiserver 去除 KUBE_ADMISSION_CONTROL中的SecurityContextDeny,ServiceAccount,並重啟kube-apiserver.service服務:#vim /etc/kubernetes/apiserverKUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"#systemctl restart kube-apiserver.service之後重新建立pod:# kubectl create -f nginx.yamlpods/nginx查看pod:# kubectl get pod nginxNAME READY STATUS RESTARTS AGEnginx 0/1 Image: nginx is not ready on the node 0 34s這裡STATUS一直是這個,建立不成功,下面排錯。通過查看pod的描述發現如下錯誤:# kubectl describe pod nginx Wed, 28 Oct 2015 10:25:30 +0800 Wed, 28 Oct 2015 10:25:30 +0800 1 {kubelet 192.168.1.16} implicitly required container POD pulled Successfully pulled Pod container image "gcr.io/google_containers/pause:0.8.0" Wed, 28 Oct 2015 10:25:30 +0800 Wed, 28 Oct 2015 10:25:30 +0800 1 {kubelet 192.168.1.16} implicitly required container POD failed Failed to create docker container with error: no such image Wed, 28 Oct 2015 10:25:30 +0800 Wed, 28 Oct 2015 10:25:30 +0800 1 {kubelet 192.168.1.16} failedSync Error syncing pod, skipping: no such image Wed, 28 Oct 2015 10:27:30 +0800 Wed, 28 Oct 2015 10:29:30 +0800 2 {kubelet 192.168.1.16} implicitly required container POD failed Failed to pull image "gcr.io/google_containers/pause:0.8.0": image pull failed for gcr.io/google_containers/pause:0.8.0, this may be because there are no credentials on this request. details: (API error (500): invalid registry endpoint "http://gcr.io/v0/". HTTPS attempt: unable to ping registry endpoint https://gcr.io/v0/v2 ping attempt failed with error: Get https://gcr.io/v2/: dial tcp 173.194.72.82:443: i/o timeout這裡可能會遇到pod狀態一直處於Penning的問題,此時可以通過kubectl describe pods/pod-name來查看pod資訊,如果沒有出錯資訊,那麼Minion一直處於下載鏡像中,下載好之後pod即會成功啟動。從網上找到 pause:0.8.0 的鏡像,然後再每個node上匯入鏡像:請在境外docker伺服器執行 docker pull 命令下載鏡像gcr.io/google_containers/pause:latestgcr.io/google_containers/pause:1.0gcr.io/google_containers/pause:0.8.0再用匯出鏡像docker save -o pause.tar gcr.io/google_containers/pausegzip pause.tar最後把這個包放到 kubernetes 環境所有的 docker 伺服器上docker load -i pause.tar.gz在執行以下命令即可成功建立pod[[email protected] ~]#kubectl create -f nginx.yamlpods/nginx查看pod[[email protected] ~]# kubectl get pod nginxNAME READY STATUS RESTARTS AGEnginx 1/1 Running 0 2min前往nodes節點上查看docker images[[email protected] ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEregistry.access.redhat.com/rhel7/pod-infrastructure latest 34d3450d733b 10 weeks ago 205 MBgcr.io/google_containers/pause 0.8.0 bf595365a558 2 years ago 241.7 kB
本文出自 “藍瘦香菇の挨踢” 部落格,請務必保留此出處http://itoliver.blog.51cto.com/12800507/1914624
Centos7上安裝Kubernetes叢集部署docker