Kubernetes簡介與部署

一、Kubernetes 簡介

1、概念:

Kubernetes?又稱 k8s,是一個可移植、可擴展的開源平臺,用于管理容器化應用和服務,通過 Kubernetes 能夠進行應用的自動化部署和擴縮容。(k8s不是容器,而是一套容器編排系統)

官網:Kubernetes

2、k8s作用:

(1) 部署方式的變更:

① 傳統部署時代:在同一臺物理服務器上運行多個應用程序,會導致資源分配出現問題 ;每個應用程序都運行在不同的物理服務器上,當某個應用程序資源利用率不高時,剩余資源無法被分配給其他應用程序,且維護物理服務器的成本很高。

② 虛擬化部署時代:虛擬化技術允許在單個物理服務器的 CPU 上運行多臺虛擬機(VM),使應用程序在不同 VM 之間被彼此隔離。每個 VM 是一臺完整的計算機,在虛擬化硬件之上運行所有組件,包括其自己的操作系統。

③ 容器部署時代:每個容器都具有自己的文件系統、CPU、內存、進程空間等,由于它們與基礎架構分離,因此可以跨云和 OS 發行版本進行移植。容器解決了應用和基礎環境異構的問題,讓應用做到一次構建,多次部署。

(2) k8s能做什么:

k8s 提供了一個框架或平臺,能夠支持和管理分布式系統的彈性運行:

① 服務發現和負載均衡:k8s提供內置的服務發現機制和負載均衡功能,可以分配網絡流量,使部署穩定。

② 存儲編排:k8s支持多種存儲解決方案,包括本地存儲、網絡存儲和云存儲,為應用程序提供持久性存儲選項。

③ 自動部署和回滾:k8s支持自動化的回滾機制,能夠在應用程序更新失敗或出現問題時自動恢復先前的狀態 ;同時也支持滾動更新,使得應用程序能夠平滑地進行版本更新。

④ 自動裝箱:k8s可以基于容器對應用運行環境的資源配置要求自動部署應用容器;

⑤ 自我修復:當所部署的 Node 節點有問題時,會對容器進行重新部署和重新調度;當容器未通過監控檢查時,會關閉此容器直到容器正常運行時,才會對外提供服務。

⑥ 密鑰和配置管理:k8s 提供了一套機制來管理敏感信息、密鑰和配置數據,使得應用程序能夠安全地訪問這些信息。

(3) k8s與docker compose的區別:

① Kubernetes 適用于大規模、復雜的容器編排和管理,它設計用于在多節點集群中部署、管理和擴展容器化應用程序,具備高度的可擴展性和彈性。

② Docker Compose 適用于單主機上的開發和測試環境,它允許在單個主機上定義和運行多個容器,并配置這些容器之間的關聯性,但通常不適用于在生產環境中管理大規模的集群。

二、Kubernetes組件和架構

1、集群組件

(1) 集群介紹:

① 集群:將同一個軟件的多臺服務器組織到一起,共同為系統提供服務,稱為該軟件的集群。

② k8s集群的角色:

control plane:控制節點(主節點) ;work node:工作節點 ;pod:應用程序容器

k8s集群中,一組工作的集群,稱為工作節點,每個集群里至少有一個工作節點,工作節點里托管著Pod,控制節點管理集群中的工作節點和Pod。

(2) 控制平面組件(Control Plane Components)

控制平面組件會為集群做出全局決策,比如資源的調度,以及檢測和響應集群事件。

① kube-apiserver:所有命令請求的入口,可以運行多個?kube-apiserver?實例進行水平擴縮;

② etcd:數據存儲,高可用的鍵值存儲,用作 Kubernetes 所有集群數據的后臺數據庫;

③ kube-scheduler:資源調度和分配,負責監視新創建的、未指定運行節點的?Pods, 并選擇節點來讓 Pod 在上面運行;

④ kube-controller-manager:調度 Pod 的控制進程。

(3) Node組件:

在每個工作節點上運行,負責維護運行的 Pod 并提供 Kubernetes 運行環境。

① kubelet:master節點派遣到node節點的代表,負責管理容器的運行;

② kube-proxy:kube-proxy 是集群中每個工作節點上所運行的網絡代理;

容器運行時 (Container Runtime):負責管理 Kubernetes 環境中容器的執行和生命周期,使 Kubernetes 能夠有效運行容器,如?containerd、CRI-O 等。

三、k8s搭建:

1、配置要求:

三臺虛擬機,硬件配置:2GB 或更多 RAM,2 個 CPU 或更多 CPU,硬盤 30GB 或更多;

集群中所有機器之間網絡互通;

可以訪問外網,需要拉取鏡像。

2、系統配置:

● 配置主機名和域名解析:

● 關閉防火墻和SELinux;

● 關閉 swap 交換分區:swapoff -a !& sed -ri 's/.*swap.*/#&/' /etc/fstab

● 設置時間同步:

yum install -y ntpdate

ntpdate time.windows.com

3、安裝 containerd:

Containerd 是一個開源的容器運行時工具,它提供了容器的核心功能 ;Docker 構建在 containerd 之上,并提供了更多的功能和工具。

① 安裝 yum-config-manager 相關依賴:

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

② 添加 containerd yum 源:

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

③ 安裝 containerd:

yum install -y containerd.io cri-tools

④ 編寫 containerd 配置文件:

cat > /etc/containerd/config.toml <<EOF
disabled_plugins = ["restart"]
[plugins.linux]
shim_debug = true
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
[plugins.cri]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"
EOF

⑤ 啟動 containerd 服務并配置開機自啟動:

systemctl enable containerd && systemctl start containerd && systemctl status containerd

⑥ 添加 containerd 配置:

cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

⑦ 配置 k8s 網絡配置:

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

⑧ 加載 overlay br_netfilter 模塊并查看當前配置是否生效:

modprobe overlay

modprobe br_netfilter

sysctl -p /etc/sysctl.d/k8s.conf

4、搭建k8s集群:

① 添加 k8s yum 源:

cat <<EOF > kubernetes.repo
[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

mv kubernetes.repo /etc/yum.repos.d/

② 安裝k8s并啟動 kubelet:

yum install -y kubelet kubeadm kubectl

systemctl enable kubelet &&systemctl start kubelet && systemctl status kubelet

5、初始化集群(在master節點操作):

kubeadm init \
--apiserver-advertise-address=192.168.198.133 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/containerd/containerd.sock

① 在使用集群前執行以下命令:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

② 添加新節點:

將主節點的令牌信息復制給節點1、2

③ 配置集群網絡:

在主節點創建 kube-flannel.yml

---
kind: Namespace
apiVersion: v1
metadata:name: kube-flannellabels:pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
rules:
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- get- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-flannellabels:tier: nodeapp: flannel
data:cni-conf.json: |{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-dsnamespace: kube-flannellabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linuxhostNetwork: truepriorityClassName: system-node-criticaltolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cni-pluginimage: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0command:- cpargs:- -f- /flannel- /opt/cni/bin/flannelvolumeMounts:- name: cni-pluginmountPath: /opt/cni/bin- name: install-cniimage: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: EVENT_QUEUE_DEPTHvalue: "5000"volumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/- name: xtables-lockmountPath: /run/xtables.lockvolumes:- name: runhostPath:path: /run/flannel- name: cni-pluginhostPath:path: /opt/cni/bin- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg- name: xtables-lockhostPath:path: /run/xtables.locktype: FileOrCreate

執行命令:kubectl apply -f kube-flannel.yml

④ 查看集群狀態和pods運行情況:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RC522(RFID射頻模塊)讀卡ID的簡單應用

文章目錄 一、RFID是什么&#xff1f;二、RC522模塊三、使用步驟1.硬件1.硬件連接2.引腳定義 2.軟件1.初始化配置代碼如下&#xff08;示例&#xff09;&#xff1a;2.引腳配置代碼如下&#xff08;示例&#xff09;&#xff1a;3.模塊復位代碼如下&#xff08;示例&#xff09…

11、虛函數、多態、純虛函數

11、虛函數、多態、純虛函數 虛函數覆蓋調用 多態實現多態的兩個必要條件多態 和 this指針多態的實現&#xff1a;虛函數表虛函數表與動態綁定動態綁定動態綁定對性能的影響 純虛函數抽象類純抽象類 虛函數 形如class 類名{ virtual 返回值 函數名(形參表) { … } }; 的成員函…

C++筆記之Delegate和委托構造(Delegating constructor)

C筆記之Delegate和委托構造辨析 code review! —— 杭州 2023-12-10 文章目錄 C筆記之Delegate和委托構造辨析0.有道詞典&#xff1a;英語發音1.ChatGPT&#xff1a;delegate概念詳解2.Delegate和“將可調用對象作為函數參數”是不是一回事&#xff1f;3.C的Delegate示例4.…

Numpy矩陣(第16講)

Numpy矩陣(第16講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ??????????????????????????????????????????????????????????????????????????????????????????…

認識計算機的設備管理

在計算機系統中&#xff0c;除了處理器和內存之外&#xff0c;其他的大部分硬設備稱為外部設備。它包括輸入/輸出設備&#xff0c;輔存設備及終端設備等。這些設備種類繁多&#xff0c;特性各異&#xff0c;操作方式的差異很大&#xff0c;從而使操作系統的設備管理變得十分繁雜…

【數據結構】哈希表算法總結

知識概覽&#xff08;哈希表&#xff09; 哈希表可以將一些值域較大的數映射到較小的空間內&#xff0c;通常用x mod 質數的方式進行映射。為什么用質數呢&#xff1f;這樣的質數還要離2的整數冪盡量遠。這可以從數學上證明&#xff0c;這樣沖突最小。取余還是會出現沖突情況。…

《三十一》開發模式構建工具 Vite

20的40分鐘之前還沒看。 20的1小時15分 基于 Vite2。 在實際開發中&#xff0c;編寫的代碼往往是不能被瀏覽器直接識別的&#xff0c;例如 ES6、React、Vue、TypeScript 等&#xff0c;必須通過構建工具來對代碼進行轉換、編譯&#xff0c;例如 Webpack、Rolluop、Vite 等。 V…

c++模板學習筆記

模板 函數模板類模板 函數模板 函數模板的格式為&#xff1a; template<typename T1,typename T2...> 函數返回值類型 函數名(參數列表) {//函數體 }typename是定義模板參數的關鍵字&#xff0c;可以使用class來代替&#xff08;不能使用struct&#xff09; 函數模板本…

【數據結構 — 排序 — 選擇排序】

數據結構 — 排序 — 選擇排序 一.選擇排序1.基本思想2.直接選擇排序2.1算法講解2.2.代碼實現2.2.1.函數定義2.2.2.算法接口實現2.2.3.測試代碼實現2.2.4.測試展示 3.堆排序3.1.算法講解3.2.代碼實現3.2.1.函數定義3.2.2.算法接口實現3.2.3.測試代碼實現3.2.4.測試展示 一.選擇…

Docker創建mqtt容器mosquitto

#1.創建映射到主機的配置文件/bwss/agent/docker/mosquitto_public/config/mosquitto.conf 內容為&#xff1a; listener 51883 0.0.0.0 # 0.0.0.0 allow_anonymous false persistence false persistence_location /mosquitto/data password_file /mosquitto/config/passwd …

Java 8 新特性深度解析:探索 Lambda 表達式、Stream API 和函數式編程的革新之路

Java8 新特性 Java 8 的革新之路 自 1995 年首次發布以來&#xff0c;Java 已經成為世界上最廣泛使用的編程語言之一。隨著時間的推移&#xff0c;Java 經歷了多次版本更新&#xff0c;其中最具里程碑意義的便是 Java 8 的發布。這個版本引入了許多重大變革&#xff0c;包括 …

開發猿的平平淡淡周末---2023/12/10

天氣陰 溫度適宜17攝氏度 AM 昨晚竟然下小雨了&#xff0c;還好還好&#xff0c;昨天刷的兩個背包基本干了 一覺睡到日三竿&#xff0c;誰是神仙&#xff0c;我是神仙&#xff08;哈哈哈哈哈哈&#xff09; 刷會兒視頻 補充下起床的動力 洗漱&#xff0c;恰飯&#xff0c;肝…

電工--基本放大電路

電壓放大倍數、輸入電阻和輸出電阻是放大電路的三個主要性能指標 共發射極基本交流放大電路 晶體管&#xff1a;電流放大作用。能量較小的輸入信號通過晶體管的控制作用&#xff0c;去控制電源所共給的能量&#xff0c;以在輸出端獲得一個能量較大的信號 集電極電源電壓&#…

traj_dist 筆記:測量軌跡距離

python 筆記 &#xff1a;trajectory_distance包&#xff08;如何可以正確使用&#xff09;【debug篇】-CSDN博客 經過前面的debug后&#xff0c;在setup.py對應的位置&#xff0c;寫代碼&#xff08;直接在別處import traj_dist我還是出問題&#xff09; 1 新建軌跡 import…

電子學會C/C++編程等級考試2021年12月(五級)真題解析

C/C++等級考試(1~8級)全部真題?點這里 第1題:書架 John最近買了一個書架用來存放奶牛養殖書籍,但書架很快被存滿了,只剩最頂層有空余。 John共有N頭奶牛(1 ≤ N ≤ 20,000),每頭奶牛有自己的高度Hi(1 ≤ Hi ≤ 10,000),N頭奶牛的總高度為S。書架高度為B(1 ≤ B ≤ S &…

[LeetCode周賽復盤] 第 375 場周賽20231210

[LeetCode周賽復盤] 第 375 場周賽20231210 一、本周周賽總結100143. 統計已測試設備1. 題目描述2. 思路分析3. 代碼實現 100155. 雙模冪運算1. 題目描述2. 思路分析3. 代碼實現 100137. 統計最大元素出現至少 K 次的子數組1. 題目描述2. 思路分析3. 代碼實現 100136. 統計好分…

Java中多態的一些簡單理解

什么是多態 1.面向對象的三大特性&#xff1a;封裝、繼承、多態。從一定角度來看&#xff0c;封裝和繼承幾乎都是為多態而準備的。這是我們最后一個概念&#xff0c;也是最重要的知識點。 2.多態的定義&#xff1a;指允許不同類的對象對同一消息做出響應。即同一消息可以根據發…

Linux用戶和權限

一、認知root用戶 1.1 了解什么是root用戶&#xff08;超級管理員&#xff09; root用戶&#xff08;超級管理員&#xff09; 無論是Windows、MacOS、Linux均采用多用戶的管理模式進行權限管理。 在Linux系統中&#xff0c;擁有最大權限的賬戶名為&#xff1a;root&#x…

Java9及之后關于類加載器的新特性

為了保證兼容性&#xff0c;JDK9沒有從根本上改變三層類加載器的架構和雙親委派模型&#xff0c;但為了模塊化系統的順利運行&#xff0c;仍然發生了一些值得被注意的變動。 一、變動1 由于引入了模塊化概念&#xff0c;所以不同的類加載器回去加載屬于不同模塊的類 啟動類加…

Nginx負載均衡實戰

&#x1f3b5;負載均衡組件 ngx_http_upstream_module https://nginx.org/en/docs/http/ngx_http_upstream_module.html upstream模塊允許Nginx定義一組或多組節點服務器組&#xff0c;使用時可以通過多種方式去定義服務器組 樣例&#xff1a; upstream backend {server back…