k8s集羣搭建

k8s簡介

kubernetes,簡稱K8s,是用8代替8個字符「ubernete」而成的縮寫。是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單而且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制node

k8s的資源對象

master

kubernetes裏的master指的是集羣控制節點,在每一個kubernetes集羣裏都須要有一個master來負責真個集羣的管理和控制,在master上運行着如下關鍵進程:linux

  • API Server(kube-apiserver):提供了HTTP Rest接口的關鍵服務進程,是kubernetes裏全部資源的增刪改查等操做的惟一入口,也是集羣中的入口進程
  • Controller Manager(kube-controller-manager):kubernetes裏全部資源對象的自動化控制中心,能夠理解成爲資源對象的「大總管」
  • Scheduler:(kube-scheduler):負責資源調度(pod調度)的進程,至關於公交公司的「調度室」
  • Etcd:全部資源對象的數據被會被保存到etcd中,持久化

node

除了master,kubernetes集羣中其餘機器被稱之爲 Node,node能夠是一臺物理機,也能夠是一臺虛擬機,node是kubernetes集羣中的工做負載節點,每一個node都會被master分配一些工做負載(docker容器),當某個node宕機時,其餘節點會接管故障節點的資源,node節點當中的重要進程:git

  • kubelet:負責pod對應容器的建立,啓停等任務,另外kubelet與master緊密協做,隨時報告給master自身的狀況,如CPU,內存,操做系統,docker版本等
  • kube-proxy:實現kubernetes server的通訊與負載均衡機制的重要組件
  • docker engine:docker引擎,負責本主機的容器建立 和管理工做

pod

pod是kubernetes最重要的基本概念,是kubernetes調度的最小單元,每一個container都有一個pause容器,稱之爲根容器,屬於kubernetes平臺的一部分,一個pod能夠運行多個容器(container),可是通常來講咱們一個pod只運行一個container,以下圖:github

 

 

k8s集羣架構圖

集羣的搭建(master)

簡單瞭解k8s的資源對象以後我們就先來搭建一個k8s集羣,由於咱們的後續操做都是創建在k8s集羣當中的,所以,咱們就須要先搭建一個k8s集羣,這樣也便於你們的理解docker

環境準備vim

三臺機器:centos

  • master:192.168.254.13
  • node1:192.168.254.12
  • node2:192.168.254.10
  • 基於主機名通訊:/etc/hosts;
  • 時間同步
  • 關閉firewalld,selinux 

第一步:確保master和node中開啓內核參數

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
  note:若是提示沒有bridge-nf-call-iptables
    解決辦法:
       [root@localhost ~]# modprobe br_netfilter 

 

第二步:配置docker  yum源和kubenetes  yum源而且安裝

#安裝kubernetes的yum源
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 gpgkey = https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg #安裝docker的yum源 cd /etc/yum.repos.d/ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install kubelet kubeadm kubectl docker-ce -y

第三步:添加初始化額外參數,忽略swap報警信息

[root@localhost ~]# vim /etc/sysconfig/kubelet 
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
[root@localhost ~]# service docker restart

第四步:初始化集羣

[root@localhost ~]# kubeadm init --kubernetes-version=v1.15.2 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU --image-repository registry.aliyuncs.com/google_containers
                解釋:
                    --apiserver-advertise-address:指定用 Master 的哪一個IP地址與 Cluster的其餘節點通訊。
                    --service-cidr:指定Service網絡的範圍,即負載均衡VIP使用的IP地址段。
                    --pod-network-cidr:指定Pod網絡的範圍,即Pod的IP地址段。
                    --image-repository:Kubenetes默認Registries地址是 k8s.gcr.io,在國內並不能訪問 gcr.io,在1.13版本中咱們能夠增長-image-repository參數,默認值是 k8s.gcr.io,將其指定爲阿里雲鏡像地址:registry.aliyuncs.com/google_containers。
                    --kubernetes-version=v1.13.3:指定要安裝的版本號。
                    --ignore-preflight-errors=:忽略運行時的錯誤,例如上面目前存在[ERROR NumCPU]和[ERROR Swap],忽略這兩個報錯就是增長--ignore-preflight-errors=NumCPU 和--ignore-preflight-errors=Swap的配置便可。

第五步:記錄如下內容,由於後期咱們的node節點須要經過ca認證加入到集羣當中

kubeadm join 192.168.254.13:6443 --token 71ovlq.w7pf14czrwi7f1ag --discovery-token-ca-cert-hash sha256:d2a9a1aa23fdbcd42711a222c959026073cf0a70f37a87806233d8319c66feb4 

第六步:按照提示完成如下三步

[root@localhost ~]# mkdir -p $HOME/.kube
[root@localhost ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@localhost ~]# chown $(id -u):$(id -g) $HOME/.kube/config 

第七步:查看節點狀態

這裏的NotReady是由於我們尚未部署網絡api

[root@localhost ~]# kubectl get node
NAME                    STATUS     ROLES    AGE   VERSION
localhost.localdomain   NotReady   master   8h    v1.15.2

第八步:查看組件狀態

[root@localhost ~]# kubectl get cs
 NAME                 STATUS    MESSAGE             ERROR
 controller-manager   Healthy   ok                  
 scheduler            Healthy   ok                  
 etcd-0               Healthy   {"health":"true"}

第九步:部署flannel網絡(github)

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

若下載失敗能夠從阿里雲上pull
    [root@master1 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64
    [root@master1 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
    [root@master1 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64

 集羣的搭建(2個node節點)

對於2個node節點的配置跟master節點的1,2,3步同樣,這裏就不在寫了,直接跳到第四步網絡

第四步:節點加入集羣,也就是部署master時候的第五步

[root@localhost ~]#kubeadm join 192.168.254.13:6443 --token wug9gq.m9j7hhmvvy9ag8kk --discovery-token-ca-cert-hash sha256:6f8a056391bf04c3911465c581e78376e1d35eb309641105ddd69ce5eb47c591 --ignore-preflight-errors=Swap

第五步:在master節點上用一下命令查看,如下狀態是表明ok

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   10h   v1.15.3
node1    Ready    <none>   10h   v1.15.3
node2    Ready    <none>   10h   v1.15.3

 

補充

1.若是發現以上錯誤說明master節點token失效,須要在master上從新生成
[root@localhost ~]# kubeadm token create --print-join-command

3.若是node機器曾經加入過集羣,要從新加入須要kubeadm reset重置,而後在join
[root@localhost ~]# kubeadm reset

4.若是忘掉token
[root@master ~]# kubeadm token list
5.若是忘掉hash串 [root@master]openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
相關文章
相關標籤/搜索