Kubernetes入門之基本組件介紹及安裝

1.什么是Kubernetes渴庆?

K8s(Kubernetes)是一個開源容器編排工具厂镇,用于自動部署纤壁、擴展和管理容器化應(yīng)用。它可以幫助我們管理由成百上千個容器組成的應(yīng)用程序捺信,也可以幫助們在不同的環(huán)境中(例如酌媒,物理機、虛擬機迄靠、云環(huán)境或者混合的部署環(huán)境)管理這些應(yīng)用程序秒咨。

K8s 最初由 Google 開發(fā),它在 Google 的大規(guī)模容器編排系統(tǒng)(Borg)的基礎(chǔ)上演化而來掌挚。Borg是谷歌內(nèi)部的大規(guī)模集群管理系統(tǒng)雨席,負責(zé)對谷歌內(nèi)部很多核心服務(wù)的調(diào)度和管理,Borg的目的是讓用戶能夠不必操心資源管理的問題,讓他們專注于自己的核心業(yè)務(wù)吠式,并且做到跨多個數(shù)據(jù)中心的資源利用率最大化陡厘。它現(xiàn)在由 Cloud Native Computing Foundation (CNCF) 管理,并且已經(jīng)成為了 CNCF 的頂級項目特占。

總之糙置,K8s 的主要作用是解決容器化應(yīng)用程序的編排和管理問題,從而幫助開發(fā)人員更輕松地構(gòu)建和維護分布式系統(tǒng)是目。

2.kubernetes 組件簡介

2.1 kube-apiserver

API 服務(wù)器是 Kubernetes 控制平面的組件谤饭, 該組件負責(zé)公開了 Kubernetes API辛慰,負責(zé)處理接受請求的工作,提供了k8s各類資源對象的增刪改查及watch等HTTP Rest接口燕垃,這些對象包括pods殖演、services、replicationcontrollers等棚潦。API Server為REST操作提供服務(wù),并為集群的共享狀態(tài)提供前端,所有其他組件都通過該前端進行交互身弊。通常我們可以通過命令行工具kubectl來與Kubernetes API Server交互,它們之間的接口是REST調(diào)用列敲。kube-apiserver端口默認值是6443阱佛,可通過啟動參數(shù)“--secure-port”來修改默認值,默認監(jiān)聽IP為0.0.0.0及本機所有IP戴而,可通過啟動參數(shù)“--bind-address”設(shè)置監(jiān)聽指定的內(nèi)網(wǎng)IP凑术。

Kubernetes API 服務(wù)器的主要實現(xiàn)是 kube-apiserver。 kube-apiserver 設(shè)計上考慮了水平擴縮所意,也就是說淮逊,它可通過部署多個實例來進行擴縮催首。 你可以運行 kube-apiserver 的多個實例,并在這些實例之間平衡流量泄鹏。

簡言之郎任,kube-apiserver是集群管理的API入口,是資源配額控制的入口备籽,提供了完備的集群安全機制舶治。打一個比較生動的比喻:是Kubernetes的唯一一個操作控制入口,即任何命令车猬,任何操作都只能通過kube-apiserver來下發(fā)霉猛。

2.2 kube-scheduler

kube-scheduler 是控制平面的組件, 負責(zé)監(jiān)視新創(chuàng)建的珠闰、未指定運行節(jié)點的 Pods韩脏, 并選擇節(jié)點來讓 Pod 在上面運行。調(diào)度決策考慮的因素包括單個 Pod 及 Pods 集合的資源需求铸磅、軟硬件及策略約束赡矢、 親和性及反親和性規(guī)范、數(shù)據(jù)位置阅仔、工作負載間的干擾及最后時限吹散。

2.3 kube-controller-manager

kube-controller-manager是控制平面的組件, 負責(zé)運行控制器進程八酒。從邏輯上講空民, 每個控制器都是一個單獨的進程, 但是為了降低復(fù)雜性羞迷,它們都被編譯到同一個可執(zhí)行文件界轩,并在同一個進程中運行。

這些控制器包括:

節(jié)點控制器(Node Controller):負責(zé)在節(jié)點出現(xiàn)故障時進行通知和響應(yīng)

任務(wù)控制器(Job Controller):監(jiān)測代表一次性任務(wù)的 Job 對象衔瓮,然后創(chuàng)建 Pods 來運行這些任務(wù)直至完成

端點分片控制器(EndpointSlice controller):填充端點分片(EndpointSlice)對象(以提供 Service 和 Pod 之間的鏈接)浊猾。

服務(wù)賬號控制器(ServiceAccount controller):為新的命名空間創(chuàng)建默認的服務(wù)賬號(ServiceAccount)。

2.4 kube-proxy

kube-proxy 是集群中每個節(jié)點上所運行的網(wǎng)絡(luò)代理热鞍, 實現(xiàn) Kubernetes 服務(wù) 概念的一部分葫慎。kube-proxy 維護節(jié)點上的一些網(wǎng)絡(luò)規(guī)則, 這些網(wǎng)絡(luò)規(guī)則會允許從集群內(nèi)部或外部的網(wǎng)絡(luò)會話與 Pod 進行網(wǎng)絡(luò)通信薇宠。如果操作系統(tǒng)提供了可用的數(shù)據(jù)包過濾層偷办,則 kube-proxy 會通過它來實現(xiàn)網(wǎng)絡(luò)規(guī)則。 否則澄港,kube-proxy 僅做流量轉(zhuǎn)發(fā)椒涯。

2.5 kubelet

kubelet會在集群中每個節(jié)點上運行,它保證容器都運行在 Pod中回梧。kubelet 接收一組通過各類機制提供給它的 PodSpecs废岂, 確保這些 PodSpecs 中描述的容器處于運行狀態(tài)且健康铡溪。 kubelet 不會管理不是由 Kubernetes 創(chuàng)建的容器。

2.6 kubectl

kubectl 作為客戶端CLI工具泪喊,可以讓用戶通過命令行對 Kubernetes集群進行操作棕硫。kubectl在$HOME/.kube目錄中查找一個名為config的配置文件√惶洌可以通過設(shè)置KUBECONFIG環(huán)境變量或設(shè)置--kubeconfig參數(shù)來指定其它kubeconfig文件哈扮。

2.7 etcd

etcd 是Core0S公司開發(fā)目前是Kubernetes默認使用的key-value數(shù)據(jù)存儲系統(tǒng),用于保存kubernetes的所有集群數(shù)據(jù)蚓再,etcd支持分布式集群功能滑肉,生產(chǎn)環(huán)境使用時需要為etcd數(shù)據(jù)提供定期備份機制。

2.8 DNS

盡管其他插件都并非嚴格意義上的必需組件摘仅,但幾乎所有 Kubernetes 集群都應(yīng)該有集群 DNS靶庙, 因為很多示例都需要 DNS 服務(wù)。集群 DNS 是一個 DNS 服務(wù)器娃属,和環(huán)境中的其他 DNS 服務(wù)器一起工作六荒,它為 Kubernetes 服務(wù)提供 DNS 記錄。Kubernetes 啟動的容器自動將此 DNS 服務(wù)器包含在其 DNS 搜索列表中矾端。

2.9 Dashboard

Dashboard是 Kubernetes 集群的通用的掏击、基于 Web 的用戶界面。 它使用戶可以管理集群中運行的應(yīng)用程序以及集群本身秩铆, 并進行故障排除砚亭。

3.安裝

安裝虛擬機環(huán)境:ubuntu-22.04,可連接外網(wǎng)

3.1 Containerd安裝

3.1.1 Containerd簡介

containerd是一個工業(yè)級標準的容器運行時殴玛,它強調(diào)簡單性捅膘、健壯性和可移植性。containerd可以在宿主機中管理完整的容器生命周期滚粟,包括容器鏡像的傳輸和存儲寻仗、容器的執(zhí)行和管理、存儲和網(wǎng)絡(luò)等坦刀。

PS:自k8s 1.23版本之后愧沟,已經(jīng)不支持docker了,所以本文后面的都是已containerd為主鲤遥。

3.1.2 Containerd的apt安裝

1)驗證倉庫版本:apt-cache madison containerd

2)安裝containerd:

a)使用命令直接安裝:apt install containerd=1.6.12-0ubuntu1~22.04.1

①驗證安裝之后的環(huán)境,使用命令:whereis runc林艘、whereis containerd盖奈、runc -v、 containerd -v

②修改配置文件:

查看配置文件:containerd --help | grep config

創(chuàng)建默認配置文件目錄:mkdir /etc/containerd/

查看默認配置: containerd config default

如果需要修改配置文件狐援,可將配置文件重定向: containerd config default > /etc/containerd/config.toml

重定向之后钢坦,需重啟配置文件: systemctl restart containerd.service

為解決后續(xù)出現(xiàn)的下載阻塞問題究孕,可先修改鏡像下載地址,將圖1位置地址改為圖2地址(此處地址修改為任何可下載的地址)

圖1
圖2

b)二進制安裝:

①網(wǎng)絡(luò)暢通的前提下爹凹,可以直接下載:wget:https://github.com/containerd/containerd/releases/download/v1.6.20/containerd-1.6.20-linux-amd64.tar.gz

②網(wǎng)絡(luò)不那么暢通的前提下厨诸,可以手動在github上下載之后,拷貝到虛擬機上禾酱,下載地址:https://github.com/kubernetes-sigs/cri-tools/releases/

下載完成之后微酬,直接解壓,解壓命令:tar xvf containerd-1.6.20-linux-amd64.tar.gz

copy?進制:cp bin/* /usr/local/bin/

驗證containerd執(zhí)?結(jié)果:containerd -v

創(chuàng)建service?件:vim /lib/systemd/system/containerd.service

編輯配置文件:mkdir /etc/containerd

重定向文件:containerd config default > /etc/containerd/config.toml

修改鏡像地址:vim /etc/containerd/config.toml (同使用apt安裝)

部署runc:wget:https://github.com/opencontainers/runc/releases/download/v1.1.5/runc.amd64颤陶,chmod a+x runc.amd64颗管,mv runc.amd64 /usr/bin/runc

3.2 安裝nerdctl

3.2.1 nerdctl簡介

nerdctl是一個較新的containerd工具,兼容Docker命令行工具滓走,比ctr覆蓋更全面垦江,另外還支持docker-compose(不包括swarm)以及一些可選的高級特性。本次學(xué)習(xí)主要以nerdctl為主搅方。

3.2.2 安裝nerdctl

a)下載:wget https://github.com/containerd/nerdctl/releases/download/v1.3.0/nerdctl-1.3.0-linux amd64.tar.gz

b)解壓在特定的某文件夾下:tar xvf nerdctl-1.3.0-linux-amd64.tar.gz -C /usr/local/bin/

c)查看版本: nerdctl version

d)nerdctl配置?件:

創(chuàng)建文件:mkdir /etc/nerdctl/

編輯文件:vim /etc/nerdctl/nerdctl.toml

3.3 安裝CNI

3.3.1?CNI簡介

容器網(wǎng)絡(luò)比吭,它定義了一套接口標準,提供了規(guī)范文檔以及一些標準實現(xiàn)姨涡。采用CNI規(guī)范來設(shè)置容器網(wǎng)絡(luò)的容器平臺不需要關(guān)注網(wǎng)絡(luò)的設(shè)置的細節(jié)梗逮,只需要按CNI規(guī)范來調(diào)用CNI接口即可實現(xiàn)網(wǎng)絡(luò)的設(shè)置。簡言之绣溜,就是一個網(wǎng)絡(luò)接口慷彤,用于給容器配置網(wǎng)絡(luò)信息。

3.3.2 安裝

a)下載命令:wget:https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins linux-amd64-v1.2.0.tgz

b)解壓到指定目錄:tar xvf cni-plugins-linux-amd64-v1.2.0.tgz?-C /opt/cni/bin/

完成之后測試網(wǎng)絡(luò):nerdctl run -d -p 80:80 --name=nginx-web1 --restart=always nginx

訪問宿主機的80端口:

c)創(chuàng)建Tomcat測試容器并指定端?:

nerdctl run -d -p 8080:8080 --name=tomcat-web1 --restart=always tomcat:7.0.88-alpine

d)創(chuàng)建MySQL測試容器并指定端?

nerdctl run -t -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=MySQL127336 -d mysql:5.6.39

測試遠程連接MySQL

apt install mariadb-client怖喻,mysql -uroot -pMySQL127336 -h192.168.0.130

3.4?安裝kubeadm基礎(chǔ)環(huán)境

a)安裝運?

二進制安裝:tar xvf runtime-docker20.10.19-containerd1.6.20-binary-install.tar.gz

執(zhí)行腳本:bash runtime-install.sh containerd

Ubuntu 2204在/etc/containerd/config.toml的這個位置必須改為true

b)安裝kubeadm底哗、kubectl、kubelet

apt-get update && apt-get install -y apt-transport-https -y

apt install kubeadm=1.26.3-00 kubelet=1.26.3-00?kubectl=1.26.3-00

導(dǎo)入Key:curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

更新源文件:cat <<EOF >/etc/apt/sources.list.d/kubernetes.list

> deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

> EOF

更新源之后锚沸,apt-get update && apt-cache madison kubeadm

c)下載kubenetes鏡像

安裝指定版本(Master和node都需要裝):kubeadm config images list --kubenetes-version v1.26.3

編輯下載鏡像源文件和下載版本:vim images-down.sh

#!/bin/bash

nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.26.3

nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller manager:v1.26.3

nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.26.3

nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.26.3

nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9

nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.6-0

nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.9.3

執(zhí)行腳本:bash images-down.sh

d) 內(nèi)核參數(shù)優(yōu)化(Master和node都需要):cat /etc/sysctl.conf

net.ipv4.ip_forward=1? #啟用路由轉(zhuǎn)發(fā)功能

vm.max_map_count=262144

kernel.pid_max=4194303

fs.file-max=1000000

net.ipv4.tcp_max_tw_buckets=6000

net.netfilter.nf_conntrack_max=2097152

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

net.bridge.bridge-nf-call-iptables = 1? #使用內(nèi)核支持對網(wǎng)橋的檢查

vm.swappiness=0

內(nèi)核模塊開機掛載:vim /etc/modules-load.d/modules.conf

ip_vs

ip_vs_lc

ip_vs_lblc

ip_vs_lblcr

ip_vs_rr

ip_vs_wrr

ip_vs_sh

ip_vs_dh

ip_vs_fo

ip_vs_nq

ip_vs_sed

ip_vs_ftp

ip_vs_sh

ip_tables

ip_set

ipt_set

ipt_rpfilter

ipt_REJECT

ipip

xt_set

br_netfilter

nf_conntrack

overlay

優(yōu)化最大文件數(shù):vim /etc/security/limits.conf

root soft core unlimited

root hard core? ? unlimited

root soft? nofile 1000000

root hard? nofile 1000000

root soft nproc? 1000000

root hard nproc? 1000000

root hard memlock? 32000

root soft memlock? 32000

root soft msgqueue? 8192000

root hard msgqueue? 8192000

優(yōu)化之后重啟:reboot

驗證服務(wù)器模塊: lsmod | grep br_netfilter

關(guān)閉交換分區(qū):

sudo swapoff -a? #臨時生效

sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab? ?#永久生效

確認是否關(guān)閉交換分區(qū):free -m

3.5 kubernetes集群初始化

3.5.1 命令行

kubeadm init --apiserver-advertise-address=192.168.0.130(此處IP為需要配置的虛擬機IP--一般為主機IP) --apiserver-bind-port=6443 --kubernetes-version=v1.26.3 --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16 --service-dns-domain=cluster.local --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=swap(最后一句是忽略分區(qū)報錯)

完成初始化如截圖所示:

按照初始化跋选,配置文件:

mkdir -p $HOME/.kube

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

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

添加新節(jié)點命令:kubeadm join 192.168.0.130:6443 --token 0ghyae.5r70wd5n6ddptvbj \ --discovery-token-ca-cert-hash sha256:abdea63c8074a01706ccc50d7545e462ab0cdd6e15779921f385d4927ed55978

當出現(xiàn)如下圖所示的時候,就說明節(jié)點加入成功了哗蜈。

如果有報錯前标,可查看日志:tail /var/log/syslog

3.5.2 基于initial文件初始化推薦:

將默認配置輸出至文件:kubeadm config print init-defaults > kubeadm-init.yaml

修改初始化后的文件:vim kubeadm-init.yaml?

此處修改IP為本地虛擬機IP,并指定配置

指定kubelet使用systemd

kind: kubeletConfiguration

apiVersion: kubelet.config.k8s.io/v1betal

cgroupDriver: systemd

指定KubeProxy使用ipvs

apiVersion: kubeproxy.config.k8s.io/v1alphal

kind: KubeProxyConfiguration

mode: ipvs

3.6 部署網(wǎng)絡(luò)組件

3.6.1 安裝flannel

下載flannel的yml文件:https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml距潘,下載之后修改網(wǎng)絡(luò)地址炼列。

3.6.2 安裝calico

同flannel,也得先下載對應(yīng)的yml文件音比,下載之后修改網(wǎng)絡(luò)地址俭尖,這個網(wǎng)絡(luò)地址也是Master初始化的網(wǎng)絡(luò)地址以及子網(wǎng)數(shù)量。

配置本機默認網(wǎng)卡(可通過ip addr查看本機網(wǎng)卡):

執(zhí)行命令:kubectl apply -f calico-ipip_ubuntu2004-k8s-1.26.x.yaml

驗證環(huán)境是否可用:kubeclt get pod -A

部署nginx

驗證完成:

部署tomcat并驗證:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者稽犁。
  • 序言:七十年代末焰望,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子已亥,更是在濱河造成了極大的恐慌熊赖,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虑椎,死亡現(xiàn)場離奇詭異震鹉,居然都是意外死亡,警方通過查閱死者的電腦和手機绣檬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門足陨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人娇未,你說我怎么就攤上這事墨缘。” “怎么了零抬?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵镊讼,是天一觀的道長。 經(jīng)常有香客問我平夜,道長蝶棋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任忽妒,我火速辦了婚禮玩裙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘段直。我一直安慰自己吃溅,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布鸯檬。 她就那樣靜靜地躺著决侈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喧务。 梳的紋絲不亂的頭發(fā)上赖歌,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音功茴,去河邊找鬼庐冯。 笑死,一個胖子當著我的面吹牛痊土,可吹牛的內(nèi)容都是我干的肄扎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼赁酝,長吁一口氣:“原來是場噩夢啊……” “哼犯祠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酌呆,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤衡载,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后隙袁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痰娱,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年菩收,在試婚紗的時候發(fā)現(xiàn)自己被綠了梨睁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡娜饵,死狀恐怖坡贺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箱舞,我是刑警寧澤遍坟,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站晴股,受9級特大地震影響愿伴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜电湘,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一隔节、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寂呛,春花似錦怎诫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呢诬,卻和暖如春涌哲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尚镰。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工阀圾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狗唉。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓初烘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肾筐,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容