好玩的K8s之基礎(chǔ)軟件安裝01:基于Ubuntu 20.04安裝kubernetes(kubeadm方法)

一、簡(jiǎn)介

1.簡(jiǎn)介

kubernetes,簡(jiǎn)稱K8s,是用8代替8個(gè)字符“ubernete”而成的縮寫。是一個(gè)開源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful),Kubernetes提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。

Kubernetes是Google開源的一個(gè)容器編排引擎,它支持自動(dòng)化部署、大規(guī)??缮炜s、應(yīng)用容器化管理。在生產(chǎn)環(huán)境中部署一個(gè)應(yīng)用程序時(shí),通常要部署該應(yīng)用的多個(gè)實(shí)例以便對(duì)應(yīng)用請(qǐng)求進(jìn)行負(fù)載均衡。

在Kubernetes中,我們可以創(chuàng)建多個(gè)容器,每個(gè)容器里面運(yùn)行一個(gè)應(yīng)用實(shí)例,然后通過內(nèi)置的負(fù)載均衡策略,實(shí)現(xiàn)對(duì)這一組應(yīng)用實(shí)例的管理、發(fā)現(xiàn)、訪問,而這些細(xì)節(jié)都不需要運(yùn)維人員去進(jìn)行復(fù)雜的手工配置和處理。

2.架構(gòu)

1)Kubernetes集群的組成

1.1 Master節(jié)點(diǎn)的核心組件

Master節(jié)點(diǎn)是Kubernetes集群的管理和控制節(jié)點(diǎn)。Master節(jié)點(diǎn)由如下4個(gè)進(jìn)程組成:

apiserver:提供Restful API,是整個(gè)集群管理和控制的入口。apiserver封裝了資源對(duì)象的CRUD操作并持久化到etcd中,REST API提供給外部客戶端和內(nèi)部組件調(diào)用。

scheduler:是調(diào)度器,主要負(fù)責(zé)Pod調(diào)度,每個(gè)Pod最終被調(diào)度到哪臺(tái)服務(wù)器上是由Scheduler決定的

controller-manager:是比較關(guān)鍵的組件,是Kubernetes集群中所有資源的自動(dòng)化控制中心

etcd: etcd是一個(gè)分布式的鍵值存儲(chǔ),它實(shí)際上保存整個(gè)Kubernetes集群各種資源和狀態(tài),可以它理解成Kubernetes集群的數(shù)據(jù)庫。

scheduler和controller-manager都是通過apiserver從etcd中獲取各種資源的狀態(tài),進(jìn)行相應(yīng)的調(diào)度和控制操作。

? 1.2? ?Node節(jié)點(diǎn)的組件

Node節(jié)點(diǎn)是Kubernetes集群的工作負(fù)載節(jié)點(diǎn),我們的服務(wù)實(shí)例是跑在多個(gè)Node節(jié)點(diǎn)上。Node節(jié)點(diǎn)上主要有如下組件:

kubelet:主要負(fù)責(zé)本節(jié)點(diǎn)Pod的生命周期管理,定期向Master上報(bào)本節(jié)點(diǎn)及Pod的基本信息。kubelet會(huì)從apiserver接收Pod的創(chuàng)建請(qǐng)求,啟動(dòng)和停止Pod。

kube-proxy: 實(shí)現(xiàn)Kubernetes上Service的通信及負(fù)載均衡。kuer-proxy目前有userspace和iptables兩種實(shí)現(xiàn)方式。userspace是在用戶空間,通過kuber-proxy實(shí)現(xiàn)負(fù)載均衡的代理服務(wù)。這個(gè)是kube-proxy的最初的版本,較為穩(wěn)定,但是效率不太高。另外一種方式是iptables的方式,在內(nèi)核空間,是純采用iptables來實(shí)現(xiàn)LB,是Kubernetes目前默認(rèn)的方式。

2) Kubernetes HA部署方案

部署了3個(gè)Master節(jié)點(diǎn),每個(gè)Master節(jié)點(diǎn)的etcd組成集群

3個(gè)Master節(jié)點(diǎn)上的APIServer的前面放一個(gè)負(fù)載均衡器,工作節(jié)點(diǎn)和客戶端通過這個(gè)負(fù)載均衡器和APIServer進(jìn)行通信

scheduler和controller-manager支持leader選舉,能保證在集群中多個(gè)實(shí)例只有一個(gè)工作,其他為備用

二、準(zhǔn)備虛擬機(jī)軟件和Linux OS

1.虛擬機(jī)軟件安裝(VirtualBox6.10)

http://www.itdecent.cn/p/7c1b9c24499d 2

2。Linux OS安裝(Ubuntu20.04)?

http://www.itdecent.cn/p/9f08d6e7c4ab

3。設(shè)置虛擬機(jī)的處理器數(shù)量至少為2

? ? ? ? master節(jié)點(diǎn)處理器數(shù)量至少為2

? ? ? ? node節(jié)點(diǎn)處理器數(shù)量可以為1

? ? ? ? 本實(shí)驗(yàn)只需要一個(gè)master節(jié)點(diǎn)和一個(gè)node節(jié)點(diǎn)

4.配置windows與ubuntu間的共享目錄

? ? 在Ubuntu20.04中創(chuàng)建share目錄? ??

????人工掛接

????????sudo mount -t vboxsf -o rw,uid=1000,gid=1000 share ~/share

????啟動(dòng)時(shí)自動(dòng)掛接

????????????sudo vi /etc/fstab

????????????在底下加一句

????????????share /home/zhangwb/share vboxsf rw,gid=1000,uid=1000,auto 0 0

? ? ? ? ? ? 注意目錄/home/zhangwb/share要換成實(shí)際的路徑

4.配置國(guó)內(nèi)源

????備份sources.list文件

????$ cd /etc/apt

????$ sudo mv sources.list sources.list.bak

????$ sudo vi /etc/apt/sources.list??

????//插入國(guó)內(nèi)源(將附錄的國(guó)內(nèi)yum源放入到文件中)

????$ sudo apt-getupdate

4.安裝sshd

安裝openssh-server

????????$?sudo apt-get install openssh-server

生成key

????????????運(yùn)行ssh-keygen生成公鑰文件和私鑰文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub

????????? ??????????ssh-keygen -t rsa

配置authorized_keys

? ???????????????????cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

? ??????????????????cat ~/.ssh/authorized_keys

執(zhí)行ssh

? ? ? ? ? ? ? ? ssh localhost

三、安裝前配置?

本實(shí)驗(yàn)先安裝好一臺(tái)master機(jī)器,等所有軟件都安裝好之后,從master復(fù)制出來一個(gè)虛擬機(jī)作為node節(jié)點(diǎn)

1.規(guī)劃主機(jī)名

????規(guī)劃主機(jī)名稱

????k8s-master

????k8s-node1

????k8s-node2

2.設(shè)置主機(jī)名

????$ sudo hostnamectl set-hostname "k8s-master"???? // Run this command on masternode

????$ cat /etc/hostname

????k8s-master

????$ sudo hostnamectl set-hostname "k8s-node1"???? // Run this command on node-0

????$ sudo hostnamectl set-hostname "k8s-node2"???? // Run this command on node-1

3.配置?/etc/hosts?

查看ip地址

$ ifconfig

//要是提示沒有安裝包時(shí)

$ sudo apt install net-tools

配置/etc/hosts

$ sudo vi /etc/hosts

10.1.13.106??? k8s-master

#10.1.13.107??? k8s-node1

#10.1.13.108??? k8s-node1

將IP替換為實(shí)際的ip地址

4.禁用swap

$ sudo swapoff –a

$ sudo vi /etc/fstab

把/etc/fstab包含swap那行記錄#掉。

5.關(guān)閉防火墻

$ sudo systemctl stop firewalld

$ sudo systemctl disable firewalld

6.禁用Selinux

$ sudo apt install selinux-utils

$ setenforce 0

7.確保時(shí)區(qū)和時(shí)間正確

$ sudo timedatectl set-timezone Asia/Shanghai

$ sudo systemctl restart rsyslog

$ sudo apt-get install ntpdate –y

$ sudo ntpdate time.windows.com

8.配置net.bridge.bridge-nf-call-iptables

$ cat <

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

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

EOF

$ sudo sysctl --system

9.設(shè)置rp_filter的值

$ sudo vi /etc/sysctl.d/10-network-security.conf

#將下面兩個(gè)參數(shù)的值從2修改為1

net.ipv4.conf.default.rp_filter=1

net.ipv4.conf.all.rp_filter=1

$ sudo sysctl --system

10.enable IP forwarding on all nodes

$ sudo vi /etc/sysctl.conf

// 找到net.ipv4.ip_forward=1” and un-comment it

$ sudo sysctl -p

net.ipv4.ip_forward = 1

四、安裝docker

1.查看當(dāng)前安裝的docker版本

$ docker version

2.卸載當(dāng)前安裝的docker版本(可選)?

$?sudo apt-get remove docker.io

3.查看可安裝的docker版本(可選)?

安裝以下包以使apt可以通過HTTPS使用存儲(chǔ)庫(repository):

$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加Docker官方的GPG密鑰:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg| sudo apt-key add –

再更新一下apt包索引:

$ sudo apt-get update

列出可用的版本:

$?apt-cache madison docker.io

4.安裝docker

安裝最新版

$ sudo apt install -y docker.io

安裝特定版

sudo apt-get install docker.io=xxx

xxx為apt-cache madison docker.io輸出中第二列完整的信息,如

sudo apt-get install docker.io=19.03.8-0ubuntu1.20.04.1

5.啟動(dòng)docker

啟動(dòng)docker

$ sudo systemctl start docker

設(shè)置開機(jī)自啟動(dòng)

$ sudo systemctl enable docker

$ sudo systemctl enable docker.service --now

6.驗(yàn)證docker

$ systemctl status docker

$ docker --version

7.重啟docker(當(dāng)有配置改動(dòng)后執(zhí)行)

$ sudo pkill -SIGHUP dockerd

//或者

$ sudo systemctl restart docker

8.配置docker鏡像加速器

獲取加速器地址

訪問www.aliyun.com,支付寶登錄,然后到https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors獲取地址和安裝方法

配置鏡像加速器

通過修改daemon配置文件/etc/docker/daemon.json來使用加速器

$ sudo mkdir -p /etc/docker

$ sudo tee /etc/docker/daemon.json <<-'EOF'

{

? "registry-mirrors": ["https://yyy.mirror.aliyuncs.com"]

}

EOF

yyy為上一步中阿里云展示的加速域名前綴

$ sudo systemctl daemon-reload

$ sudo systemctl restart docker

五、安裝K8s軟件

1.安裝最新版本

$ sudo apt-get update && sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl

$ curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

$ sudo tee /etc/apt/sources.list.d/kubernetes.list <

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

EOF

$ sudo apt-get update

//安裝最新版本

$ sudo apt-get install -y kubelet kubeadm kubectl

2.刪除已安裝版本

kubeadm version

sudo apt-get remove -y --allow-change-held-packages kubeadm?kubectl?kubelet?kubernetes-cn

3.查詢k8s可安裝的版本:

apt-cache madison kubeadm

apt-cache madison kubelet

apt-cache madison kubectl

apt-cache madison kubernetes-cni

4.安裝指定的k8s版本

sudo apt-get install -y?kubelet=1.17.3-00?kubectl=1.17.3-00?kubernetes-cni=0.8.7-00?kubeadm=1.17.3-00

5.設(shè)置不隨系統(tǒng)更新而更新

$ sudo apt-mark hold kubelet kubeadm kubectl

六、克隆nodes節(jié)點(diǎn)

1.?關(guān)閉虛擬機(jī)

$ sudo shutdown now

2. 復(fù)制虛擬機(jī)

回到Oracle VM VirtualBox主界面,選擇k8s-master,右擊鼠標(biāo),點(diǎn)擊復(fù)制...

名稱:k8s-node1

路徑:選擇合適的路徑

MAC地址:為所有網(wǎng)卡重新生成MAC地址

下一步,選擇完全復(fù)制


3. 重啟虛擬機(jī)

? ? k8s-master

? ??k8s-node

4. 重新設(shè)置node主機(jī)名

????$ sudo hostnamectl set-hostname "k8s-node1"???? // Run this command on node-1

???$ cat /etc/hostname

3.配置?/etc/hosts?

查看ip地址

$ ifconfig

4.配置/etc/hosts

$ sudo vi /etc/hosts

10.1.13.106??? k8s-master

10.1.13.107??? k8s-node1

七、初始化master(k8s-master節(jié)點(diǎn)上執(zhí)行)

$ sudo kubeadm init --kubernetes-version=v1.17.3 --pod-network-cidr 10.244.0.0/16 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

注:

? ??????--kubernetes-version=v1.17.3 當(dāng)安裝的是最新版本時(shí),這個(gè)參數(shù)可以省略

? ??????--pod-network-cidr 10.244.0.0/16? ? 需要跟當(dāng)前虛擬機(jī)的ip地址處于不同網(wǎng)段(ifconfig參考),并且與下面的網(wǎng)絡(luò)插件參數(shù)設(shè)置要一致(calico.yaml中的CALICO_IPV4POOL_CIDR(原始值192.168.0.0/16))

? ? ? ? 執(zhí)行成功后,會(huì)出現(xiàn)如下提示

?執(zhí)行?

? 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 node

八、將node節(jié)點(diǎn)加入

在所有node節(jié)點(diǎn)上執(zhí)行

sudo kubeadm join 192.168.3.164:6443 --token qqfpor.kxmumjmjnssqtg0o --discovery-token-ca-cert-hash sha256:20a02a32f27c13b4dddec7b4435370805c5bfd44186fbd25c9175a714e1e380e

其中:

192.168.3.164:6443 為master節(jié)點(diǎn)ip地址和端口

--token qqfpor.kxmumjmjnssqtg0o

? ? 這個(gè)參數(shù)可以通過在master上執(zhí)行:kubeadm token list獲得

--discovery-token-ca-cert-hash sha256:20a02a32f27c13b4dddec7b4435370805c5bfd44186fbd25c9175a714e1e380e

? ? 這個(gè)參數(shù)可以通過在master上執(zhí)行:openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'? ? ? ? ? ?獲得

? ?kubectl get node

等裝好網(wǎng)絡(luò)插件就會(huì)Ready了

九、安裝網(wǎng)絡(luò)插件(calico)

#下載

https://docs.projectcalico.org/v3.11/manifests/calico.yaml

vi calico.yaml

#修改CALICO_IPV4POOL_CIDR,為10.244.0.0/16(要與kubeadm inti中的--pod-network-cidr 10.244.0.0/16參數(shù)保持一致,默認(rèn)為192.168.0.0/16)

然后

$ kubectl apply -f calico.yaml

kubectl get node

需要等待一會(huì),中間可以通過執(zhí)行以下命令來查看pod是否全部ready

kubectl get pod -n kube-system

十、驗(yàn)證

1.創(chuàng)建nginxdeployment

$ kubectl create deployment nginx-web --image=nginx

2.獲取pod列表

$ kubectl get pod -o wide

3.測(cè)試nginx
curl http://10.244.36.65

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容