kubeadm安裝k8s集羣1.17版本

kubeadm安裝k8s集羣1.17版本

1、安裝要求:

知足如下條件
一臺或多臺機器,操做系統 CentOS7.x-86_x64
硬件配置:2GB或更多RAM,2個CPU或更多CPU,硬盤30GB或更多
集羣中全部機器之間網絡互通
能夠訪問外網,須要拉取鏡像
禁止swap分區
node

說在前面的話,kubeadm是k8s官方推出的一個用於快速部署一套k8s集羣的工具,而在近幾年如今kubeadm上生產的公司也有了,不過對於各個方面對於集羣的管理以及二次性的開發,大多數都是採用二進制的方式進行去部署生產上的k8s集羣,因爲k8s版本更新比較頻繁,像對於拿k8s集羣進行一些測試方面的操做,平時但願本身可以快速的部署一套進行測試,而對於二進制以及Ansible部署的方式固然也能夠部署,不過二進制就慢了不少,像ansible的話還得須要一臺服務器單獨拿出來作管理節點,對於咱們平時拿虛擬機去測試的話,若是本身的機器比較緊張,kubeadm也是一個比較不錯的選擇,另外也是嘗試一下新版本的k8s,緊跟官方新版本的腳步。linux

話很少說,進入正題

在kubeadm中有兩條重要的命令,一個是kubeadm init,一個是kubeadm join, init 主要的實現就是去建立一個master節點,而在運行init以後,首先會運行一系列的輸出,首先它會檢查你的docker版本或者你的swap有沒有關閉,由於docker首先是必需要運行的,在k8s集羣中,docker是用來啓動咱們的容器和鏡像的下載的,而swap須要進行關閉,這是k8s官方提出的一個默認的規則,在k8s-1.8以後就是須要你關閉swap,不然會出現報錯,目的開啓swap會佔用大的內存,也會對性能影響很大的消耗。git

第二它會生成一個用來認證k8s組件之間進行調用的CA證書,證書有兩套,第一個就是k8s的證書,另外一套就是etcd的證書,而這個證書kubeadm安裝的放置證書的位置在/etc/kubernetes/pki下面。github

第三它會把kubelet、controller-manager和scheduler等組件的配置文件寫到/etc/kubernets/目錄中,裏面包含了一些證書文件,這些主要用來鏈接api-server,除了上面幾個配置文件,還會生成一個管理相關的admin.conf文件docker

第四它會生成token文件,若是其餘節點加入進來到master的話,就會使用到這個tokenjson

第五設置一些容許節點以 Bootstrap Tokens) 和 TLS bootstrapping 方式加入集羣的必要的操做
設置csr請求自動認證的機制,這個的話,kubeadm是本身作好的,部署過二進制的應該知道,當node加入進來的時候,咱們須要對它受權approve,手動容許加入集羣中bootstrap

第六,部署dns服務,kube-proxy插件,固然通常DNS服務須要咱們部署好flannel網絡插件以後,這個服務才能運行起來vim

大概的流程是這樣的,詳情請看官網文檔
https://kubernetes.io/centos

2、集羣配置

k8s-master            192.168.1.15
k8s-node1             192.168.1.11
k8s-node2             192.168.1.14

系統初始化配置(每一個節點都須要配置)api

關閉防火牆:

#systemctl stop firewalld
#systemctl disable firewalld

關閉selinux:

#sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
#setenforce 0  # 臨時

關閉swap:

#swapoff -a  # 臨時
#vim /etc/fstab  # 永久

設置主機名:主機名根據本身的主機去使用這條命令
#hostnamectl set-hostname <hostname>

每臺主機添加hosts:

#cat >> /etc/hosts << EOF
192.168.1.15 k8s-master
192.168.1.11 k8s-node1
192.168.1.14 k8s-node2
EOF

將橋接的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  # 生效

時間同步:

#yum install ntpdate -y
#ntpdate us.pool.ntp.org

3、 全部節點安裝Docker/kubeadm/kubelet

Kubernetes默認CRI(容器運行時)爲Docker,所以先安裝Docker。
3.1 安裝Docker

#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#yum -y install docker-ce-18.06.1.ce-3.el7
#systemctl enable docker && systemctl start docker
#docker --version
Docker version 18.06.1-ce, build e68fc7a

鏡像加速劑
Daocloud公司建議使用,提升鏡像下載速度,使用k8s官方默認的cgroup的

systemd
#more /etc/docker/daemon.json 
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
 "exec-opts":["native.cgroupdriver=systemd"]
}
重啓docker
#systemctl restart docker

3.2 全部節點添加阿里雲YUM軟件源

#cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3.3 全部節點安裝kubeadm,kubelet和kubectl
因爲版本更新頻繁,這裏指定版本號部署:

#yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
#systemctl enable kubelet

4、部署Kubernetes Master

在192.168.1.15(Master)執行
並將--apiserver -advertise-address的地址寫成master的地址
因爲默認拉取鏡像地址k8s.gcr.io國內沒法訪問,這裏指定阿里雲鏡像倉庫地址。
對於其餘的辦法,或者就是提早將鏡像下載好,而後導進去,其實這塊阿里雲倉庫默認已經有維護的k8s組件的鏡像了,這裏直接可使用

#kubeadm init \
--apiserver-advertise-address=192.168.1.15 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

kubeadm init,執行init 初始化以後會顯示k8s的版本,第二就是檢查配置好比swap關閉,docker的cgroup,k8s默認須要的是systemd的驅動程序,另外須要去下載k8s組件所須要的鏡像,這裏須要等待一會.....

[init] Using Kubernetes version: v1.17.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'

使用kubectl工具:
默認init初始化以後會輸入下面應該操做的步驟,直接執行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

因爲咱們的網絡cni插件尚未部署,因此它的狀態一直是未就緒狀態

#kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   NotReady   master   19m   v1.17.0

5、安裝Pod網絡插件(CNI)

#mkdir /k8s-cni
#wget -P /k8s-cni https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

默認這個網絡插件下載會出現一些問題,拉取不到,致使網絡不通,節點沒法準備就緒
能夠改爲這個鏡像地址,到flannel的yaml下,找到amd64有兩行放置flannel的鏡像的位置替換爲:zhaocheng172/flannel:v0.11.0-amd64
確保flannel起來

#kubectl get pod -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-9d85f5447-htzgm              1/1     Running   0          27m
kube-system   coredns-9d85f5447-sz9kg              1/1     Running   0          27m
kube-system   etcd-k8s-master                      1/1     Running   0          27m
kube-system   kube-apiserver-k8s-master            1/1     Running   0          27m
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          27m
kube-system   kube-flannel-ds-amd64-5r2qv          1/1     Running   0          4m13s
kube-system   kube-proxy-npgrm                     1/1     Running   0          27m
kube-system   kube-scheduler-k8s-master            1/1     Running   0          27m

6、加入Kubernetes Node

在192.168.1.11/14(Node)執行。
向集羣添加新節點,執行在kubeadm init輸出的kubeadm join命令:
加入以後須要等待一會時間,由於它會像k8s的node節點都啓動兩個flanneld的進行,打通跨主機節點之間容器的通訊,驗證命令kubectl get pod -A

#kubeadm join 192.168.1,15:6443 --token esce21.q6hetwm8si29qxwn \
  --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

7、查看node是否加入進來

#kubectl get node
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   55m   v1.17.0
k8s-node1    Ready    <none>   25m   v1.17.0
k8s-node2    Ready    <none>   25m   v1.17.0
相關文章
相關標籤/搜索