K8S在線部署含Dashborad

參考文章 html

https://www.kubernetes.org.cn/5462.html node

前言 linux

Kubernetes做爲容器編排工具,簡化容器管理,提高工做效率而頗受青睞。不少新手部署Kubernetes因爲"kexue上網"問題舉步維艱,本文以實戰經驗詳解kubeadm不用"kexue上網"部署Kubernetes的最簡方法。 nginx

1、Kubernetes簡介 git

Kubernetes(簡稱K8S)是開源的容器集羣管理系統,能夠實現容器集羣的自動化部署、自動擴縮容、維護等功能。它既是一款容器編排工具,也是全新的基於容器技術的分佈式架構領先方案。在Docker技術的基礎上,爲容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等功能,提升了大規模容器集羣管理的便捷性。 github

K8S集羣中有管理節點與工做節點兩種類型。管理節點主要負責K8S集羣管理,集羣中各節點間的信息交互、任務調度,還負責容器、PodNameSpacesPV等生命週期的管理。工做節點主要爲容器和Pod提供計算資源,Pod及容器所有運行在工做節點上,工做節點經過kubelet服務與管理節點通訊以管理容器的生命週期,並與集羣其餘節點進行通訊。 docker

2、環境準備 centos

Kubernetes支持在物理服務器或虛擬機中運行,本次使用虛擬機準備測試環境,硬件配置信息如表所示: api

IP地址瀏覽器

節點角色

CPU

Memory

Hostname

磁盤

10.10.10.10

master

>=2c

>=2G

master

sdasdb

10.10.10.11

worker

>=2c

>=2G

node1

sdasdb

10.10.10.12

worker

>=2c

>=2G

node2

sdasdb

注:在全部節點上進行以下操做

1.設置主機名hostname,管理節點設置主機名爲 master

hostnamectl set-hostname master

須要設置其餘主機名稱時,可將 master 替換爲正確的主機名node1node2便可。

2.編輯 /etc/hosts 文件,添加域名解析。

cat <<EOF >>/etc/hosts

10.10.10.10 master

10.10.10.11 node1

10.10.10.12 node2

EOF

3.關閉防火牆、selinuxswap

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

swapoff -a

sed -i 's/.*swap.*/#&/' /etc/fstab

4.配置內核參數,將橋接的IPv4流量傳遞到iptables的鏈

cat > /etc/sysctl.d/k8s.conf <<EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

sysctl --system

5.配置國內yum

yum install -y wget

mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo

yum clean all && yum makecache

配置國內Kubernetes

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

配置 docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

3、軟件安裝

注:在全部節點上進行以下操做

1.安裝docker

yum install -y docker-ce-18.06.1.ce-3.el7

systemctl enable docker && systemctl start docker

docker –version

Docker version 18.06.1-ce, build e68fc7a

docker服務爲容器運行提供計算資源,是全部容器運行的基本平臺。

2.安裝kubeadmkubeletkubectl

yum install -y kubelet kubeadm kubectl

systemctl enable kubelet

Kubelet負責與其餘節點集羣通訊,並進行本節點Pod和容器生命週期的管理。KubeadmKubernetes的自動化部署工具,下降了部署難度,提升效率。KubectlKubernetes集羣管理工具。

4、部署master 節點

注:在master節點上進行以下操做

1.master進行Kubernetes集羣初始化。

kubeadm init --kubernetes-version=1.14.2 \

--apiserver-advertise-address=10.10.10.10 \

--image-repository registry.aliyuncs.com/google_containers \

--service-cidr=10.1.0.0/16 \

--pod-network-cidr=10.244.0.0/16

定義POD的網段爲: 10.244.0.0/16 api server地址就是master本機IP地址。

這一步很關鍵,因爲kubeadm 默認從官網k8s.grc.io下載所需鏡像,國內沒法訪問,所以須要經過–image-repository指定阿里雲鏡像倉庫地址,不少新手初次部署都卡在此環節沒法進行後續配置。

集羣初始化成功後返回以下信息:

記錄生成的最後部份內容,此內容須要在其它節點加入Kubernetes集羣時執行。

kubeadm join 10.10.10.10:6443 --token kekvgu.nw1n76h84f4camj6 \

--discovery-token-ca-cert-hash sha256:4ee74205227c78ca62f2d641635afa4d50e6634acfaa8291f28582c7e3b0e30e

2.配置kubectl工具

mkdir -p /root/.kube

cp /etc/kubernetes/admin.conf /root/.kube/config

kubectl get nodes

kubectl get cs

3.部署flannel網絡

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

5、部署node節點

注:在全部node節點上進行以下操做

執行以下命令,使全部node節點加入Kubernetes集羣

kubeadm join 10.10.10.10:6443 --token kekvgu.nw1n76h84f4camj6 \

--discovery-token-ca-cert-hash sha256:4ee74205227c78ca62f2d641635afa4d50e6634acfaa8291f28582c7e3b0e30e

此命令爲集羣初始化時(kubeadm init)返回結果中的內容。

6、集羣狀態檢測

注:在master節點上進行以下操做

1.master節點輸入命令檢查集羣狀態,返回以下結果則集羣狀態正常。

kubectl get nodes

NAME     STATUS   ROLES    AGE     VERSION

master   Ready    master   26m     v1.14.2

node1    Ready    <none>   3m10s   v1.14.2

node2    Ready    <none>   3m      v1.14.2

重點查看STATUS內容爲Ready時,則說明集羣狀態正常。

若是狀態爲NoReady狀態的,就要檢查相關的pods的狀態命令以下

kubectl get pods -n kube-system

若是對應的狀態不是running狀態的話,那麼就要查看對應pods運行日誌,如查看pod名稱爲kube-flannel-ds-amd64-2rnhm的日誌命令以下

kubectl --namespace=kube-system describe pod kube-flannel-ds-amd64-2rnhm

部分詳細信息截圖

   

pod狀態不正常的多數緣由是節點上沒有相關的鏡像可運行,解決辦法是查看建立pod使用的yml文件或者yaml文件,查找文件內的關鍵字image:後面的鏡像名稱,程序會按照yml和yaml文件內定義的image文件名和要對應節點上運行該鏡像,若是對應的節點上沒有該鏡像則程序會自動pull一個,若是pull不到,就會報錯,從而致使對應的pod狀態爲非running,繼而致使對應的nodes也爲NoReady狀態。

pull不到image的緣由爲因爲國內訪問的問題和docker自己開放的問題,致使公共源上好多非官方的image都會失效,解決辦法是配置一個能夠上網的docker環境,使用阿里雲的鏡像加速,而後搜索指定的鏡像,而後再把鏡像的名稱和版本修改成yml和yaml文件內指定的名稱和版本便可。固然,修改yml和yaml文件內的image定義的名稱爲可用的image名稱也可用。搜索鏡像,下載鏡像,和修改鏡像名稱和版本的命令以下

搜索鏡像

docker search flannel

下載鏡像

docker pull jmgao1983/flannel

修改鏡像名稱和版本

docker tag jmgao1983/flannel quay.io/coreos/flannel:v0.11.0-amd64

2.建立Pod以驗證集羣是否正常。

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

7、部署Dashboard

注:在master節點上進行以下操做

1.建立Dashboardyaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml

sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml

2.部署Dashboard

kubectl create -f kubernetes-dashboard.yaml

3.建立完成後,檢查相關服務運行狀態

kubectl get deployment kubernetes-dashboard -n kube-system

kubectl get pods -n kube-system -o wide

kubectl get services -n kube-system

netstat -ntlp|grep 30001

4.Firefox瀏覽器輸入Dashboard訪問地址:https://10.10.10.10:30001

5.查看訪問Dashboard的認證令牌

kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

6.使用輸出的token登陸Dashboard

認證經過後,登陸Dashboard首頁如圖

   

   

   

集羣初始化

kubeadm init --kubernetes-version=1.15.0 --apiserver-advertise-address=192.168.197.30 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

定義POD的網段爲: 10.244.0.0/16, api server地址就是master本機IP地址

   

   

kubeadm join 192.168.197.30:6443 --token 2c266y.tzn4mm15h4oku5dp \

--discovery-token-ca-cert-hash sha256:326c87e67335490c2f33e7b4350311cd8c90007c5e80edd9f0b2a77cede1010a

   

   

經常使用命令:

查看pod狀態

kubectl get pods -n kube-system

查看pod詳細信息

kubectl --namespace=kube-system describe pod kube-flannel-ds-amd64-2rnhm
 

   

   

[root@bogon ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

Name: dashboard-admin-token-k7fs6

Namespace: kube-system

Labels: <none>

Annotations: kubernetes.io/service-account.name: dashboard-admin

kubernetes.io/service-account.uid: 81acd960-1849-407b-b1f3-4371b0308dd4

   

Type: kubernetes.io/service-account-token

   

Data

====

ca.crt: 1025 bytes

namespace: 11 bytes

token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tazdmczYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiODFhY2Q5NjAtMTg0OS00MDdiLWIxZjMtNDM3MWIwMzA4ZGQ0Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.EQFuuNrJzo48UL7u-ON9aXSwgDa1yPdGV3AROzDaxSP_fgxptH7i_tsozV8SxY3sWi2U82640Y944T9MHw0yxJzPYCeDzDisS7q3fOw4PW6jMpSZs1ZoRfc_SnjDI4YPmrZ-OtwqMVhtlJ7879nhV0KwBsm0tBQ3-0Pr7Scj-T41Q_fUFsAfM6H3oGsB7Xicjb7YGEkEHx0zfkP03a7UH6Pt_qI5-sqGDyDaehhuSTm6wwiFnyNtB0uG8KrGU6b5uN1Fy741Rm_SUrorYuJue5-DISgxrfGftkhJxln4DgcjlJv4D3cV96-eoOgYTYt1uSUMVvY0X7xYzLeVMWF-nw

相關文章
相關標籤/搜索