1.環境配置
結點數量:3
結點系統:CentOS 7.2 / 7.3
2.效果展示
3.搭建Kubernetes環境【1】
3.1 概述
Kubernetes集群環境由Master結點和多個Worker結點組成,不同角色的環境配置不同
假如三個結點的IP如下:
1 k8s-Master: 192.168.1.1 2 k8s-Worker1:192.168.1.2 3 k8s-Worker2:192.168.1.3
3.2 Master結點環境設置
步驟1:修改hostname,禁用SELinux,設置防火牆或者禁用防火牆
1 #修改hostname和禁用SELinux 2 ~]# hostnamectl set-hostname 'k8s-master' 3 ~]# exec bash 4 ~]# setenforce 0 5 ~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux 6 #設置防火牆 7 [root@k8s-master ~]# firewall-cmd --permanent --add-port=6443/tcp 8 [root@k8s-master ~]# firewall-cmd --permanent --add-port=2379-2380/tcp 9 [root@k8s-master ~]# firewall-cmd --permanent --add-port=10250/tcp 10 [root@k8s-master ~]# firewall-cmd --permanent --add-port=10251/tcp 11 [root@k8s-master ~]# firewall-cmd --permanent --add-port=10252/tcp 12 [root@k8s-master ~]# firewall-cmd --permanent --add-port=10255/tcp 13 [root@k8s-master ~]# firewall-cmd --reload 14 [root@k8s-master ~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables 15 #或者禁用防火牆 16 [root@k8s-master ~]#systemctl stop firewalld && systemctl disable firewalld
步驟2:配置Kubernetes源
官方給的例子[https://kubernetes.io/docs/getting-started-guides/centos/centos_manual_config/]中,源里面的Kubernetes 版本太舊,寫作時還是1.5.2版本,這個版本會有Dashboard的訪問查看問題,建議不采用官方這個例子。
使用新的源:
1 #創建/etc/yum.repos.d/kubernetes.repo文件 2 [kubernetes] 3 name=Kubernetes 4 baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 5 enabled=1 6 gpgcheck=1 7 repo_gpgcheck=1 8 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg 9 https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
步驟3:安裝Kubeadm和Docker
安裝之前必須將先前的舊版本完全刪除,詳細請參考CenOS yum remove 命令
1 [root@k8s-master ~]# yum install kubeadm docker -y
啟動並啟用Kubectl和Docker服務
1 [root@k8s-master ~]# systemctl restart docker && systemctl enable docker 2 [root@k8s-master ~]# systemctl restart kubelet && systemctl enable kubelet
步驟4:初始化Kubernetes Master
1 [root@k8s-master ~]# kubeadm init
如果報錯說Swap on not support, 則使用命令 swapoff -a關閉swap功能即可
等待一會后會出現Successfully,借用一下別人的圖
注意保存生成的Token,后面要用到
步驟5:使用Cluster,確保下面的文件在當前用戶的master上,其他用戶沒有此文件不能訪問cluster
1 [root@k8s-master ~]# mkdir -p $HOME/.kube 2 [root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 3 [root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
步驟6:部署pod 網絡到集群上
Pod網絡介紹:To make the cluster status ready and kube-dns status running, deploy the pod network so that containers of different host communicated each other. POD network is the overlay network between the worker nodes.
1 [root@k8s-master ~]# export kubever=$(kubectl version | base64 | tr -d '\n') 2 [root@k8s-master ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever" 3 serviceaccount "weave-net" created 4 clusterrole "weave-net" created 5 clusterrolebinding "weave-net" created 6 daemonset "weave-net" created
步驟7:驗證結點狀態
1 [root@k8s-master ~]# kubectl get nodes 2 NAME STATUS AGE VERSION 3 k8s-master Ready 1h v1.7.5 4 [root@k8s-master ~]# kubectl get pods --all-namespaces 5 NAMESPACE NAME READY STATUS RESTARTS AGE 6 kube-system etcd-k8s-master 1/1 Running 0 57m 7 kube-system kube-apiserver-k8s-master 1/1 Running 0 57m 8 kube-system kube-controller-manager-k8s-master 1/1 Running 0 57m 9 kube-system kube-dns-2425271678-044ww 3/3 Running 0 1h 10 kube-system kube-proxy-9h259 1/1 Running 0 1h 11 kube-system kube-scheduler-k8s-master 1/1 Running 0 57m 12 kube-system weave-net-hdjzd 2/2 Running 0 7m
3.3 Worker結點環境設置
步驟1:禁用SELinux,配置防火牆 【參考Master結點環境配置步驟1】
步驟2:配置Kubernetes源【參考Master結點環境配置步驟2】
步驟3:安裝Kubeadm和Docker【參考Master結點環境配置步驟3】,Worker結點只需要重啟docker服務即可.
步驟4:將工作節點加入到Master結點的集群中,這里的Token就是剛剛Master初始化得到的Token
[root@worker-node1 ~]# kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.1:6443
如果報錯說端口10250被占用,則執行下面命令找到相關進程並殺掉:
1 sudo lsof -i :10250 2 sudo kill [pid]
如果報錯說/etc/kubernets/下面文件已經存在,則直接刪除再執行上面join命令即可
步驟5: 在Master結點上觀察集群情況
1 [root@k8s-master ~]# kubectl get nodes 2 NAME STATUS AGE VERSION 3 k8s-master Ready 2h v1.7.5 4 worker-node1 Ready 20m v1.7.5 5 worker-node2 Ready 18m v1.7.5 6 [root@k8s-master ~]#
4.搭建Dashboard環境
4.1 下載Dashboard文件[2]
1 git clone https://github.com/kubernetes/dashboard
4.2 部署Dashboard[2]
1 cd dashboard/src/deploy/recommend 2 kubectl apply -f kubernetes-dashboard.yaml
4.3 從本地訪問Dashboard[3]
1 #注意,這種方法只能從啟動Dashboard的機器進行訪問 2 kubectl proxy 3 Starting to serve on 127.0.0.1:8001 4 #在本地瀏覽器輸入下面地址進行訪問 5 http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
4.4 從外部訪問Dashboard[3]
1 #先修改kubernetes-dashboard服務 2 $ kubectl -n kube-system edit service kubernetes-dashboard 3 #將里面的 type:ClusterIP 改為 type:NodePort,然后保存 4 #查看外部端口號 5 $ kubectl -n kube-system get service kubernetes-dashboard 6 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE 7 kubernetes-dashboard 10.100.124.90 <nodes> 443:31707/TCP 21h 8 #使用master(就是啟動Dashboard的那台機器)的ip和31707這個端口進行訪問即可,注意要用https協議而不是http
4.5 登錄Dashboard賬戶方式[4][5]
使用Token方式
1 #查看token 2 [root@k8s-master ~]# kubectl get secret -n kube-system 3 #選擇namespace-controller-token 4 [root@k8s-master ~]#kubectl describe secret/namespace-controller-token-4vvdq -n kube-system 5 Name: namespace-controller-token-4vvdq 6 Namespace: kube-system 7 Labels: <none> 8 Annotations: kubernetes.io/service-account.name=namespace-controller 9 kubernetes.io/service-account.uid=84ff3777-ce8f-11e7-a967-f8bc124d5cbc 10 11 Type: kubernetes.io/service-account-token 12 13 Data 14 ==== 15 ca.crt: 1025 bytes 16 namespace: 11 bytes 17 token: eyDF4E4HuKNy6y..........Nd5xQDoCT0Pru-FdAzw
將得到的Token復制到瀏覽器的登錄界面,點擊sign in就可以登錄進去了,因為每個token對應的權限不同,因此可以查看的內容不一樣,這方面還有待探索
5. 相關命令
1 #查看集群結點狀態 2 kubectl get nodes 3 #查看詳細結點信息 4 kubectl describe nodes 5 #查看集群服務狀態 6 kubectl get pods --all-namespaces 7 #查看集群運行在那些ip上 8 kubectl cluster-info 9 #查看master的各種token 10 kubectl get secret -n kube-system 11 #查看某一個特定的token 12 kubectl describe secret/[token name] -n kube-system
5.參考文獻
【1】How to Install Kubernetes (k8s) 1.7 on CentOS 7 / RHEL 7 . [https://www.linuxtechi.com/install-kubernetes-1-7-centos7-rhel7/]
【2】README [https://github.com/kubernetes/dashboard/README.md]
【3】Accessing Dashboard 1.7.x and above [https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above]
【4】Kubernetes Dashboard 1.7.0部署二三事【http://tonybai.com/2017/09/26/some-notes-about-deploying-kubernetes-dashboard-1-7-0/】
【5】How to sign in the kubernetes dashboard? [https://stackoverflow.com/questions/46664104/how-to-sign-in-kubernetes-dashboard]
【6】Dashboard總覽[https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#welcome-view]
【7】Dashboard Authentication[https://kubernetes.io/docs/admin/authentication/]