kubernetes(K8s)集羣(一)——簡介及部署

1. kubernetes簡介

1.1 Kubernetes概述

  • kubernetes,簡稱K8s,是用8代替8個字符“ubernete”而成的縮寫。是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。
  • 在Docker作爲高級容器引擎快速發展的同時,在Google內部,容器技術已經應用了很多年,,Borg系統運行管理着成千上萬的容器應用。
  • Kubernetes項目來源於Borg,可以說是集結了Borg設計思想的精華,並且吸收了Borg系統中的經驗和教訓。
  • Kubernetes對計算資源進行了更高層次的抽象,通過將容器進行細緻的組合,將最終的應用服務交給用戶。

Kubernetes的好處

  • 隱藏資源管理和錯誤處理,用戶僅需要關注應用的開發。
  • 服務高可用、高可靠。
  • 可將負載運行在由成千上萬的機器聯合而成的集羣中。

1.2 kubernetes設計架構

Kubernetes集羣包含有節點代理kubelet和Master組件(APls,scheduler,etc),一切都基於分佈式的存儲系統。

在這裏插入圖片描述

Kubernetes主要由以下幾個核心組件組成:

  • etcd:保存了整個集羣的狀態
  • apiserver:提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制
  • controller manager:負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等
  • scheduler:負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上
  • kubelet:負責維護容器的生命週期,同時也負責Volume (CVI)和網絡(CNI)的管理
  • Container runtime:負責鏡像管理以及Pod和容器的真正運行(CRI)
  • kube-proxy:負責爲Service提供cluster內部的服務發現和負載均衡

除了核心組件,還有一些推薦的Add-ons:

  • kube-dns:負責爲整個集羣提供DNS服務
  • Ingress Controller:爲服務提供外網入口
  • Heapster:提供資源監控
  • Dashboard:提供GUI
  • Federation:提供跨可用區的集羣
  • Fluentd-elasticsearch:提供集羣日誌採集、存儲與查詢

1.3 kubernetes設計理念

Kubernetes設計理念和功能其實就是一個類似Linux的分層架構

在這裏插入圖片描述

  • 核心層::Kubernetes最核心的功能,對外提供API構建高層的應用,對內提供插件式應用執行環境
  • 應用層:部署(無狀態應用、有狀態應用、批處理任務、集羣應用等)和路由(服務發現、DNS解析等)
  • 管理層:系統度量(如基礎設施、容器和網絡的度量) ,自動化(如自動擴展、動態Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
  • 接口層:kubectl命令行工具、客戶端SDK以及集羣聯邦
  • 生態系統:在接口層之上的龐大容器集羣管理調度的生態系統,可以劃分爲兩個範疇:
    • Kubernetes外部:日誌、監控、配置管理、Cl、CD、Workflow、Faas、OTS應用、ChatOps等
    • Kubernetes內部:CRI、CNI、CVI、鏡像倉庫、Cloud Provider、集羣自身的配置和管理等

2. kubernetes部署

2.1 準備工作

準備4臺虛擬機,其中一臺做爲私有倉庫,另外三臺部署kubernetes集羣

  • 一個或者多個兼容 deb 或者 rpm 軟件包的操作系統,比如 Ubuntu 或者 CentOS
  • 每臺機器 2 GB 以上的內存,內存不足時應用會受限制
  • 主節點上 2 CPU 以上
  • 集羣裏所有的機器有完全的網絡連接,公有網絡或者私有網絡都可以

step1:做好所有節點的時間同步

可以將宿主機作爲一個時間服務器

#在真機
yum install -y chrony
vim /etc/chrony.conf
systemctl enable --now chronyd
chronyc sources -v

在這裏插入圖片描述

在這裏插入圖片描述
配置虛擬機:

yum install -y chrony
vim /etc/chrony.conf
systemctl enable --now chronyd
chronyc sources -v

在這裏插入圖片描述
在這裏插入圖片描述

所有節點主機同理配置時間同步

step2:關閉所有節點的selinux和iptables防火牆,所有節點部署docker引擎

#每個節點做好解析
vim /etc/hosts
yum install -y docker-ce docker-ce-cli

在這裏插入圖片描述

2.2 安裝 kubeadm

可以參照官方文檔:https://kubernetes.io/zh/docs/setup/independent/create-cluster-kubeadm/
在這裏插入圖片描述

step1 安裝需求:

  • 一臺或多臺運行着下列系統的機器:
    Ubuntu 16.04+
    Debian 9+
    CentOS 7
    Red Hat Enterprise Linux (RHEL) 7
    Fedora 25+
    HypriotOS v1.0.1+
    Container Linux (測試 1800.6.0 版本)
  • 每臺機器 2 GB 或更多的 RAM (如果少於這個數字將會影響您應用的運行內存)
  • 2 CPU 核或更多
  • 集羣中的所有機器的網絡彼此均能相互連接(公網和內網都可以)
  • 節點之中不可以有重複的主機名、MAC 地址或 product_uuid。
  • 開啓機器上的某些端口。
  • 禁用交換分區。爲了保證 kubelet 正常工作,您必須禁用交換分區

step2 所有節點主機進行配置:

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

systemctl enable docker
systemctl start docker

在這裏插入圖片描述

step3 安裝 kubeadm、kubelet 和 kubectl

你需要在每臺機器上安裝以下的軟件包:

  • kubeadm:用來初始化集羣的指令。
  • kubelet:在集羣中的每個節點上用來啓動 pod 和容器等。
  • kubectl:用來與集羣通信的命令行工具。

kubeadm 不能 幫您安裝或者管理 kubelet 或 kubectl,所以您需要確保它們與通過 kubeadm 安裝的控制平面的版本相匹配。 如果不這樣做,則存在發生版本偏差的風險,可能會導致一些預料之外的錯誤和問題。 然而,控制平面與 kubelet 間的相差一個次要版本不一致是支持的,但 kubelet 的版本不可以超過 API 服務器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服務器,反之則不可以。

#在server2
cd /etc/docker/
vim daemon.json

在這裏插入圖片描述

#配置yum源
cd /etc/yum.repos.d/
vim k8s.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

在這裏插入圖片描述

#下載
yum repolist
yum install -y kubelet kubeadm kubectl

在這裏插入圖片描述

在這裏插入圖片描述

scp k8s.repo server3:/etc/yum.repos.d/
scp k8s.repo server4:/etc/yum.repos.d/
#做免密處理
ssh-keygen
ssh-copy-id server3
ssh-copy-id server4

在這裏插入圖片描述

在這裏插入圖片描述

#在server3和server4上安裝
yum install -y kubelet kubeadm kubectl

step4 在控制平面節點上配置 kubelet 使用的 cgroup 驅動程序

可以訪問官網參考:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker

#在server2上
cd /etc/docker/
vim daemon.json

{
  "registry-mirrors": ["https://reg.westos.org"],
   "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]

systemctl daemon-reload
systemctl restart docker
scp daemon.json server3:/etc/docker/
scp daemon.json server4:/etc/docker/

在這裏插入圖片描述

在這裏插入圖片描述

#在server3和server4上
systemctl daemon-reload
systemctl restart docker
docker info

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

step5 設置開機自啓

#在所有節點
systemctl enable --now kubelet

step6 禁用swap分區

#所有節點
swapoff -a
vim /etc/fstab
註釋掉swap定義

在這裏插入圖片描述

2.3 部署kubernetes集羣

step1 拉取鏡像

kubeadm config print init-defaults  				#查看默認配置信息

在這裏插入圖片描述

默認從k8s.gcr.io上下載組件鏡像,需要科學上網纔可以,所以需要修改鏡像倉庫:

#列出所需鏡像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers 	
#拉取鏡像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers 

在這裏插入圖片描述

在這裏插入圖片描述step2 初始化集羣

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers

--pod-network-cidr=10.244.0.0/16:使用flannel網絡組件時必須添加
--kubernetes-version:指定k8s安裝版本
在這裏插入圖片描述

kubeadm token list

在這裏插入圖片描述

#在server3和server4上節點擴容
kubeadm join 172.25.1.2:6443 --token f4u9ir.gwq06yhhjptjqlyf \
    --discovery-token-ca-cert-hash sha256:55947bba225e0e240d4016b82412e897524a59b425654a0df5e0947835ebff8e 

在這裏插入圖片描述

在這裏插入圖片描述

step3 配置kubectl

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

kubectl get nodes
kubectl get pod -n kube-system

在這裏插入圖片描述

在這裏插入圖片描述

step4 配置kubectl 命令補齊功能

echo "source <(kubectl completion bash)">> ~/.bashrc
source .bashrc

在這裏插入圖片描述

step5 安裝flannel網絡組件

Master查看狀態:

kubectl get cs
kubectl get node
kubectl get pod-n kube-system

在這裏插入圖片描述

安裝flannel網絡組件:

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

在這裏插入圖片描述

kubectl get pod -n kube-system -o wide

在這裏插入圖片描述

到此,一個三節點的K8s集羣就部署完成了。

kubectl命令指南可以訪問官網查看:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章