部署K8S集羣

1.Kubernetesnode


1.1.概念linux

  kubernetes(一般稱爲k8s)用於自動部署、擴展和管理容器化應用程序的開源系統。它旨在提供「跨主機集羣的自動部署、擴展以及運行應用程序容器的平臺」。支持一系列容器工具  ,包括Docker等。docker


1.2.特色bootstrap

  1)可移植:支持公有云、私有云、混合雲、多重雲centos

  2)可擴展:模塊化、插件化、可掛載、可組合api

  3)自動化:自動部署、自動重啓、自動複製、自動伸縮/擴展網絡

  4)快速部署應用,快速擴展應用架構

  5)無縫對接新的應用功能app

  6)節約資源、優化硬件資源的使用dom


2.kubernetes中的相關概念


2.1.Cluster

  計算、存儲和網絡資源的集合,Kubernetes利用這些資源運行各類基於容器的應用


2.2Master

  是Cluster的大腦,主要職責是調度,即決定將應用放在哪裏運行。Master運行Linux操做系統,能夠是物理機或者虛擬機。爲了是實現高可用,能夠運行多個Master。


2.3Node

  職責是運行容器應用。Node 由 Master 管理,Node 負責監控並彙報容器的狀態,並根據 Master 的要求管理容器的生命週期。Node 運行在 Linux 操做系統,能夠是物理機或者是虛擬機。


2.4Pod

  Pod 是 Kubernetes 的最小工做單元。每一個 Pod 包含一個或多個容器。Pod 中的容器會做爲一個總體被 Master 調度到一個 Node 上運行。


2.5Controller

  Kubernetes 一般不會直接建立 Pod,而是經過 Controller 來管理 Pod 的。Controller 中定義了 Pod 的部署特性,好比有幾個副本,在什麼樣的 Node 上運行等。爲了知足不一樣的業務場景,Kubernetes 提供了多種 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等,


  Deployment 是最經常使用的 Controller,好比前面在線教程中就是經過建立 Deployment 來部署應用的。Deployment 能夠管理 Pod 的多個副本,並確保 Pod 按照指望的狀態運行。


  ReplicaSet 實現了 Pod 的多副本管理。使用 Deployment 時會自動建立 ReplicaSet,也就是說 Deployment 是經過 ReplicaSet 來管理 Pod 的多個副本,咱們一般不須要直接使用 ReplicaSet。

  

  DaemonSet 用於每一個 Node 最多隻運行一個 Pod 副本的場景。正如其名稱所揭示的,DaemonSet 一般用於運行 daemon。

  

  StatefuleSet 可以保證 Pod 的每一個副本在整個生命週期中名稱是不變的。而其餘 Controller 不提供這個功能,當某個 Pod 發生故障須要刪除並從新啓動時,Pod 的名稱會發生變化。同時 StatefuleSet 會保證副本按照固定的順序啓動、更新或者刪除。


  Job 用於運行結束就刪除的應用。而其餘 Controller 中的 Pod 一般是長期持續運行。


3.kubernetes核心組件


3.1組件組成

image.png


3.2組件架構圖

image.png


4.kubernetes分層


4.1分層架構

image.png


4.2分層說明

image.png


5.部署K8s集羣


5.1環境準備

[root@KVM ~]# cat /etc/redhat-release 

CentOS Linux release 7.4.1708 (Core) 

[root@KVM ~]# uname -r

3.10.0-693.el7.x86_64

[root@KVM ~]# getenforce 

Disabled

[root@KVM ~]# systemctl status firewalld.service 

● firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

     Docs: man:firewalld(1)


5.2主機IP規劃

image.png


5.3安裝docker(全部節點)


5.3.1.安裝輔助包

yum install -y device-mapper-persistent-data lvm2 yum-utils


5.3.2 建立docker源

yum-config-manager --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast


5.3.3安裝docker

yum install -y docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos


5.3.4啓動docker

systemctl enable docker && systemctl start docker


5.4關閉防火牆,關閉selinux(全部節點)


5.5關閉swap(全部節點)

[root@k8s-master ~]# swapoff -a

[root@k8s-master ~]# cat /etc/fstab 

#

# /etc/fstab

# Created by anaconda on Thu Apr 19 20:09:56 2018

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/centos-root /                       xfs     defaults        0 0

UUID=bef47783-f47e-49a4-ba44-74ee4cbc8606 /boot                   xfs     defaults        0 0

#/dev/mapper/centos-swap swap                    swap    defaults        0 0


5.6配置k8s路由(全部節點)

[root@k8s-master ~]# cat /etc/sysctl.d/k8s.conf 

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

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

[root@k8s-master ~]# sysctl --system


5.7安裝k8s組件(全部節點)


5.7.1建立k8s源

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


5.7.2安裝組件

yum install -y kubeadm kubectl kubelet


因爲做者所使用的網絡沒法×××,所以將相關鏡像與安裝包打包上傳到虛擬機,使用rpm安裝。

rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm

rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpm

rpm -ivh kubectl-1.9.0-0.x86_64.rpm

rpm -ivh kubeadm-1.9.0-0.x86_64.rpm

裝載k8s鏡像

docker load -i /root/k8s/docker_images/*.tar


5.7.3啓動kubelet並設置自啓動(只在master節點操做)

[root@k8s-master ~]# systemctl enable kubelet && systemctl start kubelet


若是啓動報錯,解決方案

[root@k8s-master ~]# docker info | grep Cgroup

Cgroup Driver: cgroupfs

[root@k8s-master ~]# cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 

[Service]

Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"

Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"

Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"

Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"

Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"

Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"

ExecStart=

ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS


5.8設置各個節點的hosts

cat /etc/hosts

10.0.0.11 k8s-master

10.0.0.12 k8s-node-1

10.0.0.13 k8s-node-2


5.9在master節點設置ssl(參考文檔:https://blog.51cto.com/13520761/2095798)

ssh-keygen

ssh-copy-id k8s-node-1

ssh-copy-id k8s-node-2


5.10初始化(只在master節點操做)

[root@k8s-master ~]# kubeadm init --apiserver-advertise-address=10.0.0.11 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.9.0


5.11驗證k8s安裝

[root@k8s-master ~]# kubeadm version

相關文章
相關標籤/搜索