初學Kubernetes——部署K8S 1.13

首先我準備了3臺CentOS 7 x64的虛擬機,分別對應的角色和IP地址以下:node

KS8             10.20.30.63      masternginx

Dcoker01   10.20.30.64     node01git

Docker02   10.20.30.55     node02github

每一臺爲了實驗的順利,我都關閉了防火牆和SELinuxdocker

Systemctl stop firewalldvim

Systemctl disable firewalldapi

Vi /etc/SELinux/config服務器

clip_image001

而且安裝了vim網絡

yum install -y vimapp

以及關閉全部服務器的swap分區:

vim /etc/fstab

把swap這行刪除掉後保存

clip_image002

重啓虛擬機reboot

接下來須要對每一臺添加Host記錄,實現主機和IP對應關係,若是您有DNS解析,這一步能夠忽略

vim /etc/hosts

clip_image003

接下來爲每一臺開啓網絡轉發功能

vim /etc/sysctl.conf #插入如下內容

net.ipv4.ip_forward = 1

clip_image004

sysctl -p #生效

clip_image005

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

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

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

EOF

clip_image006

使配置生效

sysctl --system

接下來再全部服務器上安裝Docker,Kubeadm,kubelet

第一個先裝docker

yum install -y docker

systemctl start docker

systemctl enable docker

clip_image007

第二個安裝kubeadm,kubelet,kybectl

先更新下yum源

yum update -y

設置kubernetes YUM倉庫

https://mirrors.aliyun.com/kubernetes/yum/repos/

clip_image008clip_image009

vim /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

clip_image010

查看kubernetes能夠安裝的版本清單

yum list --showduplicates | grep 'kubeadm\|kubectl\|kubelet'

clip_image011

在這裏安裝1.13.3

yum install -y kubelet-1.13.3 kubeadm-1.13.3 kubectl-1.13.3 kubernetes-cni-0.6.0-0

clip_image012

全部服務器只設置kubelet開機啓動

systemctl enable kubelet

接下來初始化Kubernetes Master(只在K8S服務器上執行)

kubeadm init \

--apiserver-advertise-address=10.20.30.63 \ #master監聽的IP地址

--image-repository registry.aliyuncs.com/google_containers \ #指定一個倉庫

--kubernetes-version v1.13.3 \ #指定版本

--service-cidr=10.30.0.0/16 \ #指定service網絡IP地址段,負載均衡的虛擬IP

--pod-network-cidr=10.244.0.0/16 #指定pod網絡,容器用到的IP地址,這個須要和後面用到的yml匹配一致,以下圖

++++++++++++++++++++++++++++++++

clip_image001[4]

+++++++++++++++++++++++++++++++

clip_image001[6]

完成後注意執行結果的這段kubeadm join,這是其餘節點加入須要的Token

clip_image002[4]

kubeadm join 10.20.30.63:6443 --token mf9dfj.0zaovbosaselcsmq --discovery-token-ca-cert-hash sha256:e06a5190af0a754bed99053eeaac1f419c426b3b9c41d28c187baf08f6ebc19e

生成的證書保存在

clip_image003[4]

而後配置 kubectl

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

clip_image004[4]

能夠先看看下載下來的鏡像kube-apiserver,kue-controller-manager,kube-proxy,kube-scheduler都是1.13.3版本

Docker images

clip_image005[4]

接下來安裝Pod網絡插件

++++++++++++++++++++++++

建議先執行這部避免出現下面的問題

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

clip_image001[8]

+++++++++++++++++++++++

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

clip_image001[10]

再檢查下kubectl get pods -n kube-system

clip_image001[12]

再檢查下節點狀態

kubectl get node

clip_image002[6]

再檢查下命名空間

kubectl get pods --all-namespaces或kubectl get pods --all-namespaces -o wide

clip_image003[6]

接下來就是將Node節點加入到集羣中

利用上面的這段在每一臺node去執行(Docker01和Docker02)

kubeadm join 10.20.30.63:6443 --token mf9dfj.0zaovbosaselcsmq --discovery-token-ca-cert-hash sha256:e06a5190af0a754bed99053eeaac1f419c426b3b9c41d28c187baf08f6ebc19e

clip_image001[14]

加入成功後能夠在K8S(master)看到新Node加入

clip_image002[8]

但須要多等下讓他們2個節點準備好

clip_image003[8]

其實在等待節點準備好的期間也就是節點也在拉取docker pull quay.io/coreos/flannel:v0.11.0-amd64

接下來測試下集羣,建立一個Nginx的image

kubectl create deployment nginx --image=nginx

能夠看到也是在拉取nginx的image到運行起來

clip_image004[6]

接下來發布這個Nginx可讓外部訪問

kubectl expose deployment nginx --port=80 --type=NodePort

clip_image005[6]

能夠經過kubectl get pods,svc -o wide查看更爲詳細的信息

clip_image006[4]

經過訪問任意一個Node都是能夠打開http://10.20.30.6x:32109訪問到

clip_image007[4]

最後部署一個Dashboard實現儀表板的功能來監控K8S的運維

在K8S上線下載https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml文件

yum install -y wget

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

clip_image008[4]

vim kubernetes-dashboard.yaml

把框柱的部分由咱們沒法訪問的Google源改爲阿里的源

clip_image009[4]

改爲以下:

registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1

clip_image010[4]

接下來再修改Service部分

clip_image011[4]

保存退出

而後應用kubectl apply -f kubernetes-dashboard.yaml

clip_image012[4]

查看運行狀態

kubectl get pods -n kube-system

clip_image013

查看訪問端口kubectl get pods,svc -n kube-system

clip_image014

在外部經過https訪問

clip_image015

在這裏使用令牌登陸,所以須要先建立SA並綁定默認cluster-admins管理員集羣角色,在K8S執行

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}')

建立一個服務帳戶dashboard-admin隸屬於K8S的最高權限cluster-admin組

clip_image016

建立的dashboard-admin帳戶在kubectl get secret -n kube-system下可用查看到

clip_image017

之後查看這個帳戶的令牌token也能夠執行kubectl describe secret dashboard-admin-token-6j4ln -n kube-system再次獲取

clip_image018

複製Token到令牌進行登陸

clip_image019

登陸成功,看到儀表板

clip_image020

到這裏,搭建部署K8S就告一個段落了。