1. 程式人生 > >搭建kubernetes叢集詳細步驟(包含所有映象資源)

搭建kubernetes叢集詳細步驟(包含所有映象資源)

搭建kubernetes叢集

準備工作:

搭建k8s叢集之前首先準備好≥3臺的機器

並做好免密登陸

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub <各node節點IP>

設定好主機名和時間同步

設定主機名命令:

[[email protected] ~]# hostnamectl set-hostname k8s-master01

172.19.96.11    k8s-master01---------->hostnamectl set-hostname k8s-master01

172.19.90.87    k8s-node01 ---------->hostnamectl set-hostname k8s-node01

172.19.90.88    k8s-node02---------->hostnamectl set-hostname k8s-node02

172.19.90.89    k8s-node03---------->hostnamectl set-hostname k8s-node03

修改master和各node的hosts檔案:vim /ets/hosts               新增如下內容

##叢集##

172.19.96.11    k8s-master01

172.19.90.87    k8s-node01

172.19.90.88    k8s-node02

172.19.90.89    k8s-node03

目前時間都同步:

Master和node節點全部都要安裝的程式如下,每個伺服器上都執行一次

安裝之前配置一下yum倉庫

[[email protected] ~]# cd /etc/yum.repos.d/

Docker-ce的直接阿里雲官方找到了 直接下載下來

K8s的沒找到這裡自己編寫一個寫入內容如下:

[[email protected] ]# cat /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes Repo

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

gpgcheck=1

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

enabled=1

[[email protected] ]#  rpm --import yum-key.gpg

[[email protected] ]#  rpm --import rpm-package-key.gpg

[[email protected] ]# scp kubernetes.repo docker-ce.repo k8s-node01:/etc/yum.repos.d/

[[email protected] ]# scp kubernetes.repo docker-ce.repo k8s-node02:/etc/yum.repos.d/

[[email protected] ]# scp kubernetes.repo docker-ce.repo k8s-node03:/etc/yum.repos.d/

在各node節點都需要執行:

[[email protected] ]#  rpm --import yum-key.gpg

[[email protected] ]#  rpm --import rpm-package-key.gpg

Master和node各節點都需要執行

[[email protected] ]#  yum install docker-ce kubelet kubeadm kubectl

[[email protected] ]#  yum install docker-ce kubelet kubeadm kubectl(每個node)

Master和各node節點都需要關閉防火牆,防火牆相關操作

Master和各node節點都需要開啟docker

[[email protected] ]# systemctl daemon-reload

[[email protected] ]# systemctl start docker

Master和各node節點都需要開機自啟動

systemctl enable docker kubelet

驗證一下iptables和ip6tables

[[email protected] ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables

1

[[email protected] ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables

1

不是1的話修改路徑下的檔案並儲存

檢視一下kubelet的檔案位置:

[[email protected] ~]#  rpm -ql kubelet

/etc/kubernetes/manifests

/etc/sysconfig/kubelet

/etc/systemd/system/kubelet.service

/usr/bin/kubelet

[[email protected] ~]# cat /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-on=false"

[[email protected] ~]# rpm -ql kubeadm

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

/usr/bin/kubeadm

寫一個下載映象的指令碼,因為直接去國外的地址下載會被牆

指令碼內容如下:(注意指令碼內容有些映象是後期搭建Dashboard和Helm等等用的,如果有些映象不需要也可以自己看情況修改一下指令碼)

#!/bin/bash

images=(kube-apiserver:v1.12.0 kube-controller-manager:v1.12.0 kube-scheduler:v1.12.0 kube-proxy:v1.12.0 pause:3.1 etcd:3.2.24 coredns:1.2.2 kubernetes-dashboard-amd64:v1.10.0 tiller:v2.6.1)

for ima in ${images[@]}

do

   docker pull   registry.cn-shanghai.aliyuncs.com/wangting/$ima

   docker tag    registry.cn-shanghai.aliyuncs.com/wangting/$ima   k8s.gcr.io/$ima

   docker rmi  -f  registry.cn-shanghai.aliyuncs.com/wangting/$ima

   docker tag registry.cn-shanghai.aliyuncs.com/wangting/tiller:v2.6.1 gcr.io/kubernetes-helm/tiller:v2.6.1

done

Master和各node節點都需要執行一下指令碼,一次把所需的映象全部下載到位並打好標籤

[[email protected] ~]# bash -x kubernetes.sh

Master上執行kubeadm init命令;

[[email protected] ~]# kubeadm init --kubernetes-version=v1.12.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

(此命令執行成功後,在輸出的內容裡能會看到join的命令,複製一下備著有用!)

===

kubeadm join 172.19.96.11:6443 --token 9z9bo5.wh3bdd44rgpxbnkr --discovery-token-ca-cert-hash sha256:19a3f3804eb643ca4ffad56d272fe0da0b222f4567d16c61a9e885c1489cda32

所有節點node上執行這個kubeadm join 命令(注意這個kubeadm join裡的祕鑰每個人不一樣,本文件命令不能複製貼上去使用,命令來自於自己剛才執行kubeadm init出來的)

最後開啟dashboard 頁面訪問

Master上執行

[[email protected] ~]# kubectl  edit service kubernetes-dashboard --namespace=kube-system

此命令修改頁面訪問的type形式,改成type: NodePort

[[email protected] ~]# kubectl describe secret/$(kubectl get secret -nkube-system |grep admin|awk '{print $1}') -nkube-system

此命令獲取dashboard的token,token用來後面頁面訪問使用

最後驗證所有system的pod是否都成功跑了起來,如果部分沒起來describe檢查一下對應的pod

[[email protected] ~]# kubectl get svc -n kube-system

檢視kubernetes-dashboard對外的埠是多少,此埠為外網訪問的埠

效果如下圖: