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

一、簡介

1.簡介

kubernetes,簡稱K8s,是用8代替8個字符“ubernete”而成的縮寫。是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。

Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡。

在Kubernetes中,我們可以創建多個容器,每個容器里面運行一個應用實例,然后通過內置的負載均衡策略,實現對這一組應用實例的管理、發現、訪問,而這些細節都不需要運維人員去進行復雜的手工配置和處理。

2.架構

1)Kubernetes集群的組成

1.1 Master節點的核心組件

Master節點是Kubernetes集群的管理和控制節點。Master節點由如下4個進程組成:

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

scheduler:是調度器,主要負責Pod調度,每個Pod最終被調度到哪臺服務器上是由Scheduler決定的

controller-manager:是比較關鍵的組件,是Kubernetes集群中所有資源的自動化控制中心

etcd: etcd是一個分布式的鍵值存儲,它實際上保存整個Kubernetes集群各種資源和狀態,可以它理解成Kubernetes集群的數據庫。

scheduler和controller-manager都是通過apiserver從etcd中獲取各種資源的狀態,進行相應的調度和控制操作。

? 1.2? ?Node節點的組件

Node節點是Kubernetes集群的工作負載節點,我們的服務實例是跑在多個Node節點上。Node節點上主要有如下組件:

kubelet:主要負責本節點Pod的生命周期管理,定期向Master上報本節點及Pod的基本信息。kubelet會從apiserver接收Pod的創建請求,啟動和停止Pod。

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

2) Kubernetes HA部署方案

部署了3個Master節點,每個Master節點的etcd組成集群

3個Master節點上的APIServer的前面放一個負載均衡器,工作節點和客戶端通過這個負載均衡器和APIServer進行通信

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

二、準備虛擬機軟件和Linux OS

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

http://www.lxweimin.com/p/7c1b9c24499d 2

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

http://www.lxweimin.com/p/9f08d6e7c4ab

3。設置虛擬機的處理器數量至少為2

? ? ? ? master節點處理器數量至少為2

? ? ? ? node節點處理器數量可以為1

? ? ? ? 本實驗只需要一個master節點和一個node節點

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

? ? 在Ubuntu20.04中創建share目錄? ??

????人工掛接

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

????啟動時自動掛接

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

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

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

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

4.配置國內源

????備份sources.list文件

????$ cd /etc/apt

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

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

????//插入國內源(將附錄的國內yum源放入到文件中)

????$ sudo apt-getupdate

4.安裝sshd

安裝openssh-server

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

生成key

????????????運行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

執行ssh

? ? ? ? ? ? ? ? ssh localhost

三、安裝前配置?

本實驗先安裝好一臺master機器,等所有軟件都安裝好之后,從master復制出來一個虛擬機作為node節點

1.規劃主機名

????規劃主機名稱

????k8s-master

????k8s-node1

????k8s-node2

2.設置主機名

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

//要是提示沒有安裝包時

$ 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替換為實際的ip地址

4.禁用swap

$ sudo swapoff –a

$ sudo vi /etc/fstab

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

5.關閉防火墻

$ sudo systemctl stop firewalld

$ sudo systemctl disable firewalld

6.禁用Selinux

$ sudo apt install selinux-utils

$ setenforce 0

7.確保時區和時間正確

$ 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.設置rp_filter的值

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

#將下面兩個參數的值從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.查看當前安裝的docker版本

$ docker version

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

$?sudo apt-get remove docker.io

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

安裝以下包以使apt可以通過HTTPS使用存儲庫(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.啟動docker

啟動docker

$ sudo systemctl start docker

設置開機自啟動

$ sudo systemctl enable docker

$ sudo systemctl enable docker.service --now

6.驗證docker

$ systemctl status docker

$ docker --version

7.重啟docker(當有配置改動后執行)

$ 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.設置不隨系統更新而更新

$ sudo apt-mark hold kubelet kubeadm kubectl

六、克隆nodes節點

1.?關閉虛擬機

$ sudo shutdown now

2. 復制虛擬機

回到Oracle VM VirtualBox主界面,選擇k8s-master,右擊鼠標,點擊復制...

名稱:k8s-node1

路徑:選擇合適的路徑

MAC地址:為所有網卡重新生成MAC地址

下一步,選擇完全復制


3. 重啟虛擬機

? ? k8s-master

? ??k8s-node

4. 重新設置node主機名

????$ 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節點上執行)

$ 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 當安裝的是最新版本時,這個參數可以省略

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

? ? ? ? 執行成功后,會出現如下提示

?執行?

? 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節點加入

在所有node節點上執行

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

其中:

192.168.3.164:6443 為master節點ip地址和端口

--token qqfpor.kxmumjmjnssqtg0o

? ? 這個參數可以通過在master上執行:kubeadm token list獲得

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

? ? 這個參數可以通過在master上執行: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

等裝好網絡插件就會Ready了

九、安裝網絡插件(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參數保持一致,默認為192.168.0.0/16)

然后

$ kubectl apply -f calico.yaml

kubectl get node

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

kubectl get pod -n kube-system

十、驗證

1.創建nginxdeployment

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

2.獲取pod列表

$ kubectl get pod -o wide

3.測試nginx
curl http://10.244.36.65

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372