国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

二進制部署kubernetes(1.20)

這篇具有很好參考價值的文章主要介紹了二進制部署kubernetes(1.20)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

??作者簡介:一名運維工作人員。
??宣言:人生就是B(birth)和D(death)之間的C(choise),做好每一個選擇。
??創(chuàng)作不易,動動小手給個點贊加關(guān)注吧,有什么意見評論區(qū)告訴我,一起學(xué)習(xí)。?

?一、前言

生產(chǎn)環(huán)境中有兩種部署k8s的方法:

? ? ? ?

kubeadm
Kubeadm是一個K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。

二進制包
從github下載發(fā)行版的二進制包,手動部署每個組件,組成Kubernetes集群。
小結(jié):Kubeadm降低部署門檻,但屏蔽了很多細節(jié),遇到問題很難排查。如果想更容易可控,推薦使用二進制包部署Kubernetes集群,雖然手動部署麻煩點,期間可以學(xué)習(xí)很多工作原理,也利于后期維護。

這里就使用二進制的方式來部署k8s,在企業(yè)中一般也是使用二級制來部署。

1、kubernetes核心概念

  • k8s-master 負責任務(wù)調(diào)度,控制節(jié)點
  • k8s-node1 承載運行pod(容器)
  • k8s-node2 承載運行pod(容器

1)Master

Master主要負責資源調(diào)度,控制pod副本,和提供統(tǒng)一訪問集群的入口。--核心節(jié)點也是管理節(jié)點

2)Node

Node是Kubernetes集群架構(gòu)中運行Pod的服務(wù)節(jié)點。Node是Kubernetes集群操作的單元,用來承載被分配Pod的運行,是Pod運行的宿主機,由Master管理,并匯報容器狀態(tài)給Master,同時根據(jù)Master要求管理容器生命周期。

3)Node IP

? ?Node節(jié)點的IP地址,是Kubernetes集群中每個節(jié)點的物理網(wǎng)卡的IP地址,是真實存在的物理網(wǎng)絡(luò),所有屬于這個網(wǎng)絡(luò)的服務(wù)器之間都能通過這個網(wǎng)絡(luò)直接通信;

4)Pod

? ?Pod直譯是豆莢,可以把容器想像成豆莢里的豆子,把一個或多個關(guān)系緊密的豆子包在一起就是豆莢(一個Pod)。在k8s中我們不會直接操作容器,而是把容器包裝成Pod再進行管理運行于Node節(jié)點上, 若干相關(guān)容器的組合。Pod內(nèi)包含的容器運行在同一宿主機上,使用相同的網(wǎng)絡(luò)命名空間、IP地址和端口,能夠通過localhost進行通信。Pod是k8s進行創(chuàng)建、調(diào)度和管理的最小單位,它提供了比容器更高層次的抽象,使得部署和管理更加靈活。一個Pod可以包含一個容器或者多個相關(guān)容器。

? ?Pod 就是 k8s 集群里的"應(yīng)用";而一個平臺應(yīng)用,可以由多個容器組成。


二、服務(wù)器規(guī)劃

1、一Matser雙Node

因為電腦配置原因,做不了高可用,所以以一主二從為例。

1)服務(wù)器規(guī)劃

主機 IP 組件
k8s-master???????? 192.168.79.148

kube-apiserver,kube-controller-manager,kube-scheduler,etcd

k8s-node1

192.168.79.149

kubelet,kube-proxy,docker,etcd

k8s-node2 192.168.79.150

kubelet,kube-proxy,docker,etcd

2)服務(wù)器架構(gòu)

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

?Kubernetes Master:

集群控制節(jié)點,負責整個集群的管理和控制,基本上Kubernetes所有的控制命令都是發(fā)給它,它來負責具體的執(zhí)行過程,我們后面所有執(zhí)行的命令基本都是在Master節(jié)點上運行的;

包含如下組件:
1.Kubernetes API Server
作為Kubernetes系統(tǒng)的入口,其封裝了核心對象的增刪改查操作,以RESTful API接口方式提供給外部客戶和內(nèi)部組件調(diào)用。維護的REST對象持久化到Etcd中存儲。

2.Kubernetes Scheduler
為新建立的Pod進行節(jié)點(node)選擇(即分配機器),負責集群的資源調(diào)度。組件抽離,可以方便替換成其他調(diào)度器。

3.Kubernetes Controller
負責執(zhí)行各種控制器,目前已經(jīng)提供了很多控制器來保證Kubernetes的正常運行。
? ?Replication Controller
? ? ? ?管理維護Replication Controller,關(guān)聯(lián)Replication Controller和Pod,保證Replication Controller定義的副本數(shù)量與實際運行Pod數(shù)量一致。

?? Deployment Controller
? ? ? ?管理維護Deployment,關(guān)聯(lián)Deployment和Replication ?Controller,保證運行指定數(shù)量的Pod。當Deployment更新時,控制實現(xiàn)Replication ?Controller和 Pod的更新。

? ?Node Controller
? ? ? 管理維護Node,定期檢查Node的健康狀態(tài),標識出(失效|未失效)的Node節(jié)點。

? ?Namespace Controller
? ? ? 管理維護Namespace,定期清理無效的Namespace,包括Namesapce下的API對象,比如Pod、Service等。

? ?Service Controller
? ? ? 管理維護Service,提供負載以及服務(wù)代理。

? ?EndPoints Controller
? ? ? 管理維護Endpoints,關(guān)聯(lián)Service和Pod,創(chuàng)建Endpoints為Service的后端,當Pod發(fā)生變化時,實時更新Endpoints。

? ?Service Account Controller
? ? ? 管理維護Service Account,為每個Namespace創(chuàng)建默認的Service Account,同時為Service Account創(chuàng)建Service Account Secret。

? ?Persistent Volume Controller
? ? ? 管理維護Persistent Volume和Persistent Volume ?Claim,為新的Persistent Volume Claim分配Persistent Volume進行綁定,為釋放的Persistent ?Volume執(zhí)行清理回收。

? ?Daemon Set Controller
? ? ? 管理維護Daemon Set,負責創(chuàng)建Daemon Pod,保證指定的Node上正常的運行Daemon Pod。

  Job Controller
? ? ? 管理維護Job,為Jod創(chuàng)建一次性任務(wù)Pod,保證完成Job指定完成的任務(wù)數(shù)目

? ?Pod Autoscaler Controller
? ? ? 實現(xiàn)Pod的自動伸縮,定時獲取監(jiān)控數(shù)據(jù),進行策略匹配,當滿足條件時執(zhí)行Pod的伸縮動作。

Kubernetes Node:
除了Master,Kubernetes集群中的其他機器被稱為Node節(jié)點,Node節(jié)點才是Kubernetes集群中的工作負載節(jié)點,每個Node都會被Master分配一些工作負載(Docker容器),當某個Node宕機,其上的工作負載會被Master自動轉(zhuǎn)移到其他節(jié)點上去;

包含如下組件:
  1.Kubelet
    負責管控容器,Kubelet會從Kubernetes API Server接收Pod的創(chuàng)建請求,啟動和停止容器,監(jiān)控容器運行狀態(tài)并匯報給Kubernetes API Server。

  2.Kubernetes Proxy
    負責為Pod創(chuàng)建代理服務(wù),Kubernetes Proxy會從Kubernetes API ?Server獲取所有的Service信息,并根據(jù)Service的信息創(chuàng)建代理服務(wù),實現(xiàn)Service到Pod的請求路由和轉(zhuǎn)發(fā),從而實現(xiàn)Kubernetes層級的虛擬轉(zhuǎn)發(fā)網(wǎng)絡(luò)。

  3.Docker Engine(docker),Docker引擎,負責本機的容器創(chuàng)建和管理工作; ?
  4.網(wǎng)絡(luò)插件:解決node之間pod的通信問題。

數(shù)據(jù)庫

etcd數(shù)據(jù)庫,可以部署到master、node上,推薦獨立部署
分布式鍵值存儲系統(tǒng)。用于保存集群狀態(tài)數(shù)據(jù),比如Pod、Service等對象信息

3)配置主機映射?

[root@k8s-master ~]# vim /etc/hosts
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.79.148	k8s-master
192.168.79.149	k8s-node1
192.168.79.150	k8s-node2

?使用scp將hosts文件發(fā)送給node1和node2。


三、Etc集群

Etcd 是一個分布式鍵值存儲系統(tǒng),Kubernetes使用Etcd進行數(shù)據(jù)存儲,所以先準備一個Etcd數(shù)據(jù)庫,為解決Etcd單點故障,應(yīng)采用集群方式部署,這里使用3臺組建集群,可容忍1臺機器故障,當然,你也可以使用5臺組建集群,可容忍2臺機器故障。

注:為了節(jié)省機器,這里與K8s節(jié)點機器復(fù)用。也可以獨立于k8s集群之外部署,只要apiserver能連接到就行

1、準備cfssl證書生成工具

cfssl是一個開源的證書管理工具,使用json文件生成證書,相比openssl更方便使用。

cfssl工具的網(wǎng)盤

鏈接:https://pan.baidu.com/s/1zf6ZaDYS2r4OZWz0zHr7zQ?pwd=nar2?
提取碼:nar2?

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

這里我用rz將本地的cfssl工具拷到虛擬機,然后給他們執(zhí)行的命令,為了方便使用這些工具,將這些拷到/usr/bin目錄下。

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

這樣就可以直接使用cfssl、cfssl-certinfo、cfssljson這三個命令了。

2、生成Etcd證書

1)自簽證書頒發(fā)機構(gòu)(CA)

先創(chuàng)建工作目錄,并進入到該目錄

mkdir opt/etcd -p

cd opt/etcd

[root@k8s-master1 etcd]#vim ca-config.json
[root@k8s-master etcd]# cat ca-config.json 
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "www": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}


[root@k8s-master etcd]# cat ca-csr.json 
{
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}

2)生成證書

[root@k8s-master etcd]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -


[root@k8s-master etcd]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

可以看到當前目錄多了兩個ca-key.pem ?ca.pem文件,這就是證書文件。

3)使用自簽CA簽發(fā)Etcd HTTPS證書

創(chuàng)建證書申請文件
[root@k8s-master1 etcd]# vim server-csr.json
[root@k8s-master etcd]# cat server-csr.json
{
    "CN": "etcd",
    "hosts": [
    "192.168.79.148",
    "192.168.79.149",
    "192.168.79.150"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}

上述文件hosts字段中IP為所有etcd節(jié)點的集群內(nèi)部通信IP,一個都不能少。

#生成證書
[root@k8s-master1 etcd]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

#查看證書生成情況
[root@k8s-master etcd]# ls *pem
ca-key.pem  ca.pem  server-key.pem  server.pem

又多出server-key.pem和server.pem文件。

3、部署Etcd集群

首先需要etcd的二進制文件。

etcd的二進制文件的網(wǎng)盤。

鏈接:https://pan.baidu.com/s/1va2DkgJSZ-lL5T5xBKVodg?pwd=j5gt?
提取碼:j5gt?

1)獲取etcd的軟件包

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

注意:我這里為了防止etcd目錄下文件太多太亂,先進入到了家目錄,然后通過rz將本地的etcd包拷到虛擬機

2)解壓etcd包

?解壓后在etcd-v3.4.9-linux-amd64目錄下有etcd和etcdctl兩個可執(zhí)行的文件。

[root@k8s-master ~]# tar xfz etcd-v3.4.9-linux-amd64.tar.gz

[root@k8s-master ~]# ls
anaconda-ks.cfg  cfssl_1.6.4_linux_amd64  cfssl-certinfo_1.6.4_linux_amd64  cfssljson_1.6.4_linux_amd64  etcd-v3.4.9-linux-amd64  etcd-v3.4.9-linux-amd64.tar.gz  opt

[root@k8s-master ~]# ls etcd-v3.4.9-linux-amd64
Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md

3)創(chuàng)建工作目錄并且將etcd和etcdctl拷到工作目錄

[root@k8s-master ~]# mkdir -p /opt/etcd/{bin,cfg,ssl}
[root@k8s-master ~]# cp etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/
[root@k8s-master ~]# tree /opt/
/opt/
└── etcd
    ├── bin
    │?? ├── etcd
    │?? └── etcdctl
    ├── cfg
    └── ssl

這里在/opt/etcd/目錄下創(chuàng)建了bin,cfg,ssl三個文件夾,bin存放的是命令文件,cfg存放的是?

4)創(chuàng)建etcd的配置文件

[root@k8s-master ~]# vim /opt/etcd/cfg/etcd.conf
[root@k8s-master ~]# cat /opt/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.79.148:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.79.148:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.79.148:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.79.148:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.79.148:2380,etcd-2=https://192.168.79.149:2380,etcd-3=https://192.168.79.150:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

?*參數(shù)解釋

?????? ETCD_NAME:節(jié)點名稱,集群中唯一

?????? ETCD_DATA_DIR:數(shù)據(jù)目錄

?????? ETCD_LISTEN_PEER_URLS:集群通信監(jiān)聽地址,填本機ip

?????? ETCD_LISTEN_CLIENT_URLS:客戶端訪問監(jiān)聽地址,填本機ip

?????? ETCD_INITIAL_ADVERTISE_PEERURLS:集群通告地址,填本機ip

?????? ETCD_ADVERTISE_CLIENT_URLS:客戶端通告地址,填本機ip

?????? ETCD_INITIAL_CLUSTER:集群節(jié)點地址

?????? ETCD_INITIALCLUSTER_TOKEN:集群Token

?????? ETCD_INITIALCLUSTER_STATE:加入集群的當前狀態(tài),new是新集群,existing表示加入已有集群

?5)system管理etcd

system管理etcd需要再/usr/lib/systemd/system下編寫相應(yīng)的service文件。

[root@k8s-master ~]# vim /usr/lib/systemd/system/etcd.service
[root@k8s-master ~]# cat /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
--cert-file=/opt/etcd/ssl/server.pem \
--key-file=/opt/etcd/ssl/server-key.pem \
--peer-cert-file=/opt/etcd/ssl/server.pem \
--peer-key-file=/opt/etcd/ssl/server-key.pem \
--trusted-ca-file=/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

注意這里的證書文件要記得拷到/opt/etcd/bin/目錄下,這里system管理etcd讀取的證書寫到了這個目錄,當然也可以改,就是為了方便整理,是放到了這個文件夾下。

[root@k8s-master ~]# cp  opt/etcd/*pem   /opt/etcd/ssl/
[root@k8s-master ~]# tree /opt/
/opt/
└── etcd
    ├── bin
    │?? ├── etcd
    │?? └── etcdctl
    ├── cfg
    │?? └── etcd.conf
    └── ssl
        ├── ca-key.pem
        ├── ca.pem
        ├── server-key.pem
        └── server.pem

4 directories, 7 files

將這些證書和etcd.conf以及service的文件、etcd執(zhí)行文件都要拷到node1和node2上,其中etcd.conf內(nèi)需要更改ip。

6)拷貝文件到node1和node2并修改etcd.conf文件

6.1)node1和node2創(chuàng)建相同的工作目錄

mkdir /opt/etcd/{bin,cfg,ssl} -p

拷貝etcd.conf文件
[root@k8s-master ~]# scp /opt/etcd/cfg/etcd.conf  k8s-node1:/opt/etcd/cfg/
  
[root@k8s-master ~]# scp /opt/etcd/cfg/etcd.conf  k8s-node2:/opt/etcd/cfg/


#拷貝證書
[root@k8s-master ~]# scp /opt/etcd/ssl/* k8s-node1:/opt/etcd/ssl/
   
[root@k8s-master ~]# scp /opt/etcd/ssl/* k8s-node2:/opt/etcd/ssl/


#拷貝etcd執(zhí)行文件
[root@k8s-master ~]# scp /opt/etcd/bin/etcd k8s-node1:/opt/etcd/bin/
  
[root@k8s-master ~]# scp /opt/etcd/bin/etcd k8s-node2:/opt/etcd/bin/


#拷貝system管理etcd文件配置
[root@k8s-master ~]# scp /usr/lib/systemd/system/etcd.service  k8s-node1:/usr/lib/systemd/system/

[root@k8s-master ~]# scp /usr/lib/systemd/system/etcd.service  k8s-node2:/usr/lib/systemd/system/
6.2)修改node1上的etcd.conf文件

需要修改的位置:

ETCD_NAME

ETCD_LISTEN_PEER_URLS

ETCD_LISTEN_CLIENT_URLS

ETCD_INITIAL_ADVERTISE_PEER_URLS

ETCD_ADVERTISE_CLIENT_URLS

[root@k8s-node1 ~]# cat /opt/etcd/cfg/etcd.conf 
#[Member]
ETCD_NAME="etcd-2"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.79.149:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.79.149:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.79.149:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.79.149:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.79.148:2380,etcd-2=https://192.168.79.149:2380,etcd-3=https://192.168.79.150:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
6.3)修改node2上的etcd.conf文件?

需要修改的位置:

ETCD_NAME

ETCD_LISTEN_PEER_URLS

ETCD_LISTEN_CLIENT_URLS

ETCD_INITIAL_ADVERTISE_PEER_URLS

ETCD_ADVERTISE_CLIENT_URLS

[root@k8s-node2 ~]# cat /opt/etcd/cfg/etcd.conf 
#[Member]
ETCD_NAME="etcd-3"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.79.150:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.79.150:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.79.150:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.79.150:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.79.148:2380,etcd-2=https://192.168.79.149:2380,etcd-3=https://192.168.79.150:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

node1和node2都要改相應(yīng)的位置。ETCD_NAME這里要保證不能重復(fù)。

?7)啟動etcd

使用systemctl啟動服務(wù)。

這里需要注意:單啟動一個etcd,bash頁面會進入等待狀態(tài),等待集群中的另一臺啟動,因為etcd啟動至少需要集群中的兩臺都啟動,才會真正的啟動。

分別執(zhí)行這三條命令:

systemctl daemon-reload?
systemctl start etcd.service?
systemctl enable etcd.service?

#master
[root@k8s-moster ~]# systemctl daemon-reload 
[root@k8s-moster ~]# systemctl start etcd.service 
[root@k8s-moster ~]# systemctl enable etcd.service 


#node1
[root@k8s-node1 ~]# systemctl daemon-reload 
[root@k8s-node1 ~]# systemctl start etcd.service 
[root@k8s-node1 ~]# systemctl enable etcd.service 


#node2
[root@k8s-node2 ~]# systemctl daemon-reload 
[root@k8s-node2 ~]# systemctl start etcd.service 
[root@k8s-node2 ~]# systemctl enable etcd.service 

因為添加了system控制etcd所以這里需要用systemctl? daemon-reload加載一下文件。?

8)查看etcd集群狀態(tài)

[root@k8s-master ~]# /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.79.148:2379,https://192.168.79.149:2379,https://192.168.79.150:2379" endpoint health --write-out=table
+-----------------------------+--------+-------------+-------+
|          ENDPOINT           | HEALTH |    TOOK     | ERROR |
+-----------------------------+--------+-------------+-------+
| https://192.168.79.148:2379 |   true | 10.984284ms |       |
| https://192.168.79.149:2379 |   true | 11.169278ms |       |
| https://192.168.79.150:2379 |   true | 11.828544ms |       |
+-----------------------------+--------+-------------+-------+

?etcd部署成功!如果出現(xiàn)錯誤,可以查看/var/log/messages日志進行排錯。


四、部署Master節(jié)點組件

Master節(jié)點組件:kube-apiserver,kube-controller-manager,kube-scheduler

1、下載kubernetes1.20的二進制包

將kubernetes-v1.20.4-server-linux-amd64.tar.gz拷到虛擬機

該包中包含了k8s中所需要的所有需要的組件。

該包在網(wǎng)盤中,鏈接如下:

鏈接:https://pan.baidu.com/s/1utWPPj-CJ08Tbx0AgKyMNA?pwd=xiji?
提取碼:xiji?

[root@k8s-master k8s]# cd
[root@k8s-master ~]# rz

[root@k8s-master ~]# ls
anaconda-ks.cfg  cfssl_1.6.4_linux_amd64           cfssljson_1.6.4_linux_amd64  etcd-v3.4.9-linux-amd64.tar.gz                opt
ca               cfssl-certinfo_1.6.4_linux_amd64  etcd-v3.4.9-linux-amd64      kubernetes-v1.20.4-server-linux-amd64.tar.gz

還是一樣,我先回到家目錄然后把包拷到家目錄中。

1)創(chuàng)建k8s的部署工作目錄

[root@k8s-master ~]# mkdir /opt/kubernetes/{bin,cfg,ssl} -p
[root@k8s-master ~]# tree /opt/kubernetes/
/opt/kubernetes/
├── bin
├── cfg
└── ssl

3 directories, 0 files

2)拷貝需要的組件?

解壓kubernetes包并將kubernetes/server/bin目錄下中master需要的組件執(zhí)行文件拷到工作目錄下的bin文件夾下。

[root@k8s-master ~]# tar xfz kubernetes-v1.20.4-server-linux-amd64.tar.gz

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

[root@k8s-master ~]# cp kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager} /opt/kubernetes/bin/
[root@k8s-master ~]# tree /opt/kubernetes/
/opt/kubernetes/
├── bin
│   ├── kube-apiserver
│   ├── kube-controller-manager
│   └── kube-scheduler
├── cfg
└── ssl

3 directories, 3 files

3)拷貝kubectl工具?

?將kubectl拷貝到/usr/bin目錄下,kubectl是Kubernetes的命令行工具,可以用來管理Kubernetes集群。

[root@k8s-master ~]# cp kubernetes/server/bin/kubectl  /usr/bin/

2、部署kube-apiserver

作為Kubernetes系統(tǒng)的入口,其封裝了核心對象的增刪改查操作,以RESTful API接口方式提供給外部客戶和內(nèi)部組件調(diào)用。維護的REST對象持久化到Etcd中存儲。

1)生成kube-apiserver證書

首先創(chuàng)建證書工作目錄

[root@k8s-master ~]# mkdir ca/k8s -p
[root@k8s-master ~]# cd ca/k8s

自簽證書頒發(fā)機構(gòu)(CA)

[root@k8s-master k8s]# vim ca-config.json
[root@k8s-master k8s]# cat ca-config.json 
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}


[root@k8s-master k8s]# vim ca-csr.json
[root@k8s-master k8s]# cat ca-csr.json
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}

生成證書

[root@k8s-master k8s]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

[root@k8s-master k8s]# ls 
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

多出ca-csr.pem和ca-key.pem兩個文件。

使用自簽CA簽發(fā)kube-apiserver HTTPS證書。

[root@k8s-master k8s]# vim server-csr.json
[root@k8s-master k8s]# cat server-csr.json
{
    "CN": "kubernetes",
    "hosts": [
      "10.0.0.1",
      "127.0.0.1",
      "192.168.79.148",    #master的ip    
      "192.168.79.149",    #node的ip
      "192.168.79.150",    #node2的ip
      "192.168.79.151",    #預(yù)留ip
      "192.168.79.133",    #預(yù)留ip
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}

生成證書

#生成證書
[root@k8s-master k8s]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server

#查看證書生成情況
[root@k8s-master k8s]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  server.csr  server-csr.json  server-key.pem  server.pem

將生成的證書都拷貝到/opt/kubernetes/ssl文件夾,一共是四個pem文件。

[root@k8s-master ~]# cp ca/k8s/*pem /opt/kubernetes/ssl/
[root@k8s-master ~]# tree /opt/kubernetes/
/opt/kubernetes/
├── bin
│?? ├── kube-apiserver
│?? ├── kube-controller-manager
│?? └── kube-scheduler
├── cfg
└── ssl
    ├── ca-key.pem
    ├── ca.pem
    ├── server-key.pem
    └── server.pem

3 directories, 7 files

多出兩個serber-csr和server-key.pem文件。

2)kube-apiserver配置文件

--etcd-servers=要改為自己的集群ip

--bind-address=改為自己master的ip

--advertise-address=自己的master的ip

--service-cluster-ip-range=10.0.0.0/24虛擬網(wǎng)關(guān)不要改

[root@k8s-master ~]# vim /opt/kubernetes/cfg/kube-apiserver.conf
[root@k8s-master ~]# cat /opt/kubernetes/cfg/kube-apiserver.conf
KUBE_APISERVER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--etcd-servers=https://192.168.79.148:2379,https://192.168.79.149:2379,https://192.168.79.150:2379 \
--bind-address=192.168.79.148 \
--secure-port=6443 \
--advertise-address=192.168.79.148 \
--allow-privileged=true \
--service-cluster-ip-range=10.0.0.0/24 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode=RBAC,Node \
--enable-bootstrap-token-auth=true \
--token-auth-file=/opt/kubernetes/cfg/token.csv \
--service-node-port-range=30000-32767 \
--kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \
--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \
--tls-cert-file=/opt/kubernetes/ssl/server.pem  \
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
--service-account-issuer=api \
--service-account-signing-key-file=/opt/kubernetes/ssl/server-key.pem \
--etcd-cafile=/opt/etcd/ssl/ca.pem \
--etcd-certfile=/opt/etcd/ssl/server.pem \
--etcd-keyfile=/opt/etcd/ssl/server-key.pem \
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
--proxy-client-cert-file=/opt/kubernetes/ssl/server.pem \
--proxy-client-key-file=/opt/kubernetes/ssl/server-key.pem \
--requestheader-allowed-names=kubernetes \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--enable-aggregator-routing=true \
--audit-log-maxage=30 \
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"

參考說明

?????? --logtostderr:啟用日志

?????? ---v:日志等級

?????? --log-dir:日志目錄

?????? --etcd-servers:etcd集群地址? ? ? ? ? ? ? ? #k8s集群的所有階段的ip

?????? --bind-address:監(jiān)聽地址? ? ? ? ????????????????#master的ip地址

?????? --secure-port:https安全端口

?????? --advertise-address:集群通告地址? ? ? ? ? ? ? ? #master的ip地址

?????? --allow-privileged:啟用授權(quán)

?????? --service-cluster-ip-range:Service虛擬IP地址段? ? ? ? #10.0.0.0/24這里不用改

?????? --enable-admission-plugins:準入控制模塊

?????? --authorization-mode:認證授權(quán),啟用RBAC授權(quán)和節(jié)點自管理

?????? --enable-bootstrap-token-auth:啟用TLS bootstrap機制

?????? --token-auth-file:bootstrap token文件

?????? --service-node-port-range:Service nodeport類型默認分配端口范圍

?????? --kubelet-client-xxx:apiserver訪問kubelet客戶端證書

?????? --tls-xxx-file:apiserver https證書

?????? 1.20版本必須加的參數(shù):--service-account-issuer,--service-account-signing-key-file

?????? --etcd-xxxfile:連接Etcd集群證書

?????? --audit-log-xxx:審計日志

?????? 啟動聚合層相關(guān)配置:--requestheader-client-ca-file,--proxy-client-cert-file,--proxy-client-key-file,--requestheader-allowed-names,--requestheader-extra-headers-prefix,--requestheader-group-headers,--requestheader-username-headers,--enable-aggregator-routing

3)配置token文件

Master apiserver啟用TLS認證后,Node節(jié)點kubelet組件想要加入集群,必須使用CA簽發(fā)的有效證書才能與apiserver通信,當Node節(jié)點很多時,簽署證書是一件很繁瑣的事情,因此有了TLS Bootstrapping機制,kubelet會以一個低權(quán)限用戶自動向apiserver申請證書,kubelet的證書由apiserver動態(tài)簽署。
認證大致工作流程如圖所示:

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

#生成一個32位的隨機碼
[root@k8s-master ~]# head -c 16 /dev/urandom | od -An -t x | tr -d ' '
c47ffb939f5ca36231d9e3121a252940

[root@k8s-master ~]# vim /opt/kubernetes/cfg/token.csv
[root@k8s-master ~]# cat /opt/kubernetes/cfg/token.csv 
c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node-bootstrapper"

這里的token可以自己自定義,需要和后續(xù)的配置保持一致,否則后面部署kubelet將會認證錯誤。?

4)systemd管理apiserver

[root@k8s-master ~]# vim /usr/lib/systemd/system/kube-apiserver.service
[root@k8s-master ~]# cat /usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.conf
ExecStart=/opt/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target

5)加載system配置并啟動apiserver設(shè)置開機自啟

[root@k8s-master ~]# systemctl daemon-reload 
[root@k8s-master ~]# systemctl start kube-apiserver.service 
[root@k8s-master ~]# systemctl enable kube-apiserver.service 

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維?查看api-server的服務(wù)狀態(tài)是running。

3、部署kube-controller-manager

負責執(zhí)行各種控制器,目前已經(jīng)提供了很多控制器來保證Kubernetes的正常運行。

1)編寫配置文件

[root@k8s-master ~]# vim /opt/kubernetes/cfg/kube-controller-manager.conf
[root@k8s-master ~]# cat /opt/kubernetes/cfg/kube-controller-manager.conf
KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--leader-elect=true \
--kubeconfig=/opt/kubernetes/cfg/kube-controller-manager.kubeconfig \
--bind-address=127.0.0.1 \
--allocate-node-cidrs=true \
--cluster-cidr=10.244.0.0/16 \
--service-cluster-ip-range=10.0.0.0/24 \
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \
--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem  \
--root-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \
--experimental-cluster-signing-duration=87600h0m0s"    #簽證到期時間為10年

參數(shù)說明

?????? --kubeconfig:連接apiserver配置文件

?????? --leader-elect:當該組件啟動多個時,自動選舉(HA)

?????? --cluster-signing-cert-file/--cluster-signing-key-file:自動為kubelet頒發(fā)證書的CA,與apiserver保持一致

2)生成kube-controller-manager證書

到 ca/k8s目錄下。

#到k8s目錄
[root@k8s-master ~]# cd ca/k8s

#編寫生成證書的json文件
[root@k8s-master k8s]# vim kube-controller-manager-csr.json
[root@k8s-master k8s]# cat kube-controller-manager-csr.json
{
  "CN": "system:kube-controller-manager",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}

生成證書

#生成證書
[root@k8s-master k8s]# cfssl gencert -ca=/root/ca/k8s/ca.pem -ca-key=/root/ca/k8s/ca-key.pem -config=/root/ca/k8s/ca-config.json -profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager

#查看證書生成情況
[root@k8s-master k8s]# ls kube-controller-manager*
kube-controller-manager.csr  kube-controller-manager-csr.json  kube-controller-manager-key.pem  kube-controller-manager.pem

發(fā)現(xiàn)多出kube-controller-manager-key.pem、kube-controller-manager.pem兩個文件

將生成的證書拷貝到kubernetes/ssl文件夾內(nèi)。

[root@k8s-master k8s]# cp kube-controller-manager*pem /opt/kubernetes/ssl/
[root@k8s-master k8s]# tree /opt/kubernetes/
/opt/kubernetes/
├── bin
│?? ├── kube-apiserver
│?? ├── kube-controller-manager
│?? └── kube-scheduler
├── cfg
│?? ├── kube-apiserver.conf
│?? ├── kube-controller-manager.conf
│?? └── token.csv
└── ssl
    ├── ca-key.pem
    ├── ca.pem
    ├── kube-controller-manager-key.pem
    ├── kube-controller-manager.pem
    ├── server-key.pem
    └── server.pem

3 directories, 12 files

3)生成manager的kubeconfig文件

因為在生成該文件的時候會用到剛剛生成的證書,為了方便建議進入到存有manager證書的目錄操作

[root@k8s-master k8s]# KUBE_CONFIG="/opt/kubernetes/cfg/kube-controller-manager.kubeconfig"    #生成kubeconfig文件的存放位置
[root@k8s-master k8s]# KUBE_APISERVER="https://192.168.79.148:6443"   #master的ip

執(zhí)行以下四句命令。?

#設(shè)置集群參數(shù)
[root@k8s-master k8s]# kubectl config set-cluster kubernetes \
>   --certificate-authority=/opt/kubernetes/ssl/ca.pem \
>   --embed-certs=true \
>   --server=${KUBE_APISERVER} \
>   --kubeconfig=${KUBE_CONFIG}

#設(shè)置客戶端認證參數(shù)
[root@k8s-master k8s]# kubectl config set-credentials kube-controller-manager   --client-certificate=./kube-controller-manager.pem   --client-key=/opt/kubernetes/ssl/kube-controller-manager-key.pem   --embed-certs=true   --kubeconfig=${KUBE_CONFIG}

#設(shè)置上下文參數(shù)
[root@k8s-master k8s]# kubectl config set-context default \
>   --cluster=kubernetes \
>   --user=kube-controller-manager \
>   --kubeconfig=${KUBE_CONFIG}
Context "default" created.

#設(shè)置默認上下文
[root@k8s-master k8s]# kubectl config use-context default --kubeconfig=${KUBE_CONFIG}

?查看kubeconfig生成情況。

[root@k8s-master k8s]# tree /opt/kubernetes/
/opt/kubernetes/
├── bin
│?? ├── kube-apiserver
│?? ├── kube-controller-manager
│?? └── kube-scheduler
├── cfg
│?? ├── kube-apiserver.conf
│?? ├── kube-controller-manager.conf
│?? ├── kube-controller-manager.kubeconfig
│?? └── token.csv
└── ssl
    ├── ca-key.pem
    ├── ca.pem
    ├── kube-controller-manager-key.pem
    ├── kube-controller-manager.pem
    ├── server-key.pem
    └── server.pem

3 directories, 13 files

在cfg,剛剛指定的位置生成了?kube-controller-manager.kubeconfig文件。

4)systemd管理controller-manager

[root@k8s-master k8s]# vim /usr/lib/systemd/system/kube-controller-manager.service
[root@k8s-master k8s]# cat /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-controller-manager.conf
ExecStart=/opt/kubernetes/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target

5)加載service并啟動controller-manager,設(shè)置開機自啟

[root@k8s-master k8s]# systemctl daemon-reload 
[root@k8s-master k8s]# systemctl start kube-controller-manager.service 
[root@k8s-master k8s]# systemctl enable kube-controller-manager.service

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

?啟動成功!

?4、部署kube-scheduler

為新建立的Pod進行節(jié)點(node)選擇(即分配機器),負責集群的資源調(diào)度。組件抽離,可以方便替換成其他調(diào)度器。

1)創(chuàng)建配置文件

[root@k8s-master k8s]# vim /opt/kubernetes/cfg/kube-scheduler.conf
[root@k8s-master k8s]# cat /opt/kubernetes/cfg/kube-scheduler.conf
KUBE_SCHEDULER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--leader-elect \
--kubeconfig=/opt/kubernetes/cfg/kube-scheduler.kubeconfig \
--bind-address=127.0.0.1"

參數(shù)說明

?????? --kubeconfig:連接apiserver配置文件

?????? --leader-elect:當該組件啟動多個時,自動選舉(HA)

2)生成kube-scheduler證書

[root@k8s-master k8s]# vim kube-scheduler-csr.json
[root@k8s-master k8s]# cat kube-scheduler-csr.json
{
  "CN": "system:kube-scheduler",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}

生成證書

#生成證書
[root@k8s-master k8s]# cfssl gencert -ca=/root/ca/k8s/ca.pem -ca-key=/root/ca/k8s/ca-key.pem -config=/root/ca/k8s/ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler

#查看證書生成情況
[root@k8s-master k8s]# ls kube-scheduler*
kube-scheduler.csr  kube-scheduler-csr.json  kube-scheduler-key.pem  kube-scheduler.pem

將證書拷貝到kubernetes/ssl文件夾。?

[root@k8s-master k8s]# cp kube-scheduler-key*pem /opt/kubernetes/ssl/

該文件夾下多出?kube-scheduler-key.pem 、kube-scheduler.pem兩個文件。

3)生成schedule的kubeconfig文件

#指定生成kubeconfig的路徑
[root@k8s-master k8s]# KUBE_CONFIG="/opt/kubernetes/cfg/kube-scheduler.kubeconfig"
#master的ip
[root@k8s-master k8s]# KUBE_APISERVER="https://192.168.79.148:6443"

執(zhí)行以下四個命令 。

#設(shè)置集群參數(shù)
[root@k8s-master k8s]# kubectl config set-cluster kubernetes \
>   --certificate-authority=/opt/kubernetes/ssl/ca.pem \
>   --embed-certs=true \
>   --server=${KUBE_APISERVER} \
>   --kubeconfig=${KUBE_CONFIG}

#設(shè)置客戶端認證參數(shù)
[root@k8s-master k8s-scheduler]# kubectl config set-credentials kube-scheduler \
>   --client-certificate=./kube-scheduler.pem \
>   --client-key=./kube-scheduler-key.pem \
>   --embed-certs=true \
>   --kubeconfig=${KUBE_CONFIG}

#設(shè)置上下文參數(shù)
[root@k8s-master k8s]# kubectl config set-context default \
>   --cluster=kubernetes \
>   --user=kube-scheduler \
>   --kubeconfig=${KUBE_CONFIG}

#設(shè)置默認上下文
[root@k8s-master k8s]# kubectl config use-context default --kubeconfig=${KUBE_CONFIG}

查看kubeconfig生成情況。

[root@k8s-master k8s]# tree /opt/kubernetes/
/opt/kubernetes/
├── bin
│?? ├── kube-apiserver
│?? ├── kube-controller-manager
│?? └── kube-scheduler
├── cfg
│?? ├── kube-apiserver.conf
│?? ├── kube-controller-manager.conf
│?? ├── kube-controller-manager.kubeconfig
│?? ├── kube-scheduler.conf
│?? ├── kube-scheduler.kubeconfig
│?? └── token.csv
└── ssl
    ├── ca-key.pem
    ├── ca.pem
    ├── kube-controller-manager-key.pem
    ├── kube-controller-manager.pem
    ├── kube-scheduler-key.pem
    ├── kube-scheduler.pem
    ├── server-key.pem
    └── server.pem

3 directories, 17 files

發(fā)現(xiàn)cfg下多出了kube-scheduler.kubeconfig文件,說明生成成功!

4)systemd管理scheduler

[root@k8s-master k8s]# vim /usr/lib/systemd/system/kube-scheduler.service
[root@k8s-master k8s]# cat /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-scheduler.conf
ExecStart=/opt/kubernetes/bin/kube-scheduler $KUBE_SCHEDULER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target

5)加載service配置,并啟動scheduler,設(shè)置開機啟動

[root@k8s-master k8s]# systemctl daemon-reload 
[root@k8s-master k8s]# systemctl start kube-scheduler.service
[root@k8s-master k8s]# systemctl enable kube-scheduler.service 

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

啟動成功!

?5、查看集群狀態(tài)

需要用到kubuctl工具。

1)生成kubectl連接集群的證書

[root@k8s-master k8s]# vim admin-csr.json
[root@k8s-master k8s]# cat admin-csr.json
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}

生成證書

#生成證書
[root@k8s-master k8s]# cfssl gencert -ca=/root/ca/k8s/ca.pem -ca-key=/root/ca/k8s/ca-key.pem -config=/root/ca/k8s/ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

#查看證書生成情況
[root@k8s-master k8s]# ls admin*
admin.csr  admin-csr.json  admin-key.pem  admin.pem

該文件夾下多出兩個pem文件。

2)生成kubeconfig文件

?創(chuàng)建存放config的目錄,這里在root下創(chuàng)建一個隱藏的文件夾,因為kubectl是個工具不是服務(wù),就直接在root下創(chuàng)建隱藏的文件夾。

[root@k8s-master k8s]# mkdir /root/.kube

#設(shè)置兩個變量分別表示生成的config的存放位置,和需要用到的master的ip
[root@k8s-master k8s]# KUBE_CONFIG="/root/.kube/config"
[root@k8s-master k8s]# KUBE_APISERVER="https://192.168.79.148:6443"

執(zhí)行以下四句命令

#設(shè)置集群參數(shù)
[root@k8s-master k8s]# kubectl config set-cluster kubernetes \
    --certificate-authority=/opt/kubernetes/ssl/ca.pem \
    --embed-certs=true \
    --server=${KUBE_APISERVER} \
    --kubeconfig=${KUBE_CONFIG}

#設(shè)置客戶端認證參數(shù)
[root@k8s-master k8s]# kubectl config set-credentials cluster-admin \
    --client-certificate=./admin.pem \
    --client-key=./admin-key.pem \
    --embed-certs=true \
    --kubeconfig=${KUBE_CONFIG}

#設(shè)置上下文參數(shù)
[root@k8s-master k8s]# kubectl config set-context default \
    --cluster=kubernetes \
    --user=cluster-admin \
    --kubeconfig=${KUBE_CONFIG}

#設(shè)置默認上下文
[root@k8s-master k8s]# kubectl config use-context default --kubeconfig=${KUBE_CONFIG}

3)kubectl查看集群狀態(tài)

[root@k8s-master k8s]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   
scheduler            Healthy   ok                  
etcd-1               Healthy   {"health":"true"}   
etcd-2               Healthy   {"health":"true"}

#查看命名空間
[root@k8s-master k8s]# kubectl get ns
NAME              STATUS   AGE
default           Active   66m
kube-node-lease   Active   66m
kube-public       Active   66m
kube-system       Active   66m

集群狀態(tài)都是healthy表示集群狀態(tài)正常,如果出錯,查看日志進行排錯。


五、部署node組件

kubelet,kube-proxy,docker,etcd

注:兩臺node的操作是一樣的。

1、安裝docker

1)下載國內(nèi)阿里云的docker源

[root@k8s-node1 ~]# wget -O /etc/yum.repos.d/docker-ce.repo  

2)安裝docker(node節(jié)點都要安裝)

[root@k8s-node1 ~]# yum install -y docker-ce

#配置加速器,為了加快docker從dockerhub上pull鏡像的速度
[root@k8s-node1 ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
  {
    "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "100m"
    },
    "storage-driver": "overlay2"
  }
  EOF
[root@k8s-node1 ~]# systemctl daemon-reload
[root@k8s-node1 ~]# systemctl start docker
[root@k8s-node1 ~]# systemctl enable docker

node1?

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

?node2

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

?2、創(chuàng)建node組件的工作目錄并拷問文件(node都要創(chuàng)建)

#node1
[root@k8s-node1 ~]# mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
[root@k8s-node1 ~]# tree /opt/kubernetes/
/opt/kubernetes/
├── bin
├── cfg
├── logs
└── ssl

#node2
[root@k8s-node2 ~]# mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
[root@k8s-node2 ~]# tree /opt/kubernetes/
/opt/kubernetes/
├── bin
├── cfg
├── logs
└── ssl

master將kubelet和kube-proxy以及k8s需要的ca證書拷貝給node節(jié)點

kubelet和kube-proxy都在master的kubernetes包的server/bin目錄下。

#傳到node1
[root@k8s-master ~]# scp  kubernetes/server/bin/{kubelet,kube-proxy} k8s-node1:/opt/kubernetes/bin/

#傳到node2
[root@k8s-master ~]# scp  kubernetes/server/bin/{kubelet,kube-proxy} k8s-node2:/opt/kubernetes/bin/

3、部署kubelet

負責管控容器,Kubelet會從Kubernetes API Server接收Pod的創(chuàng)建請求,啟動和停止容器,監(jiān)控容器運行狀態(tài)并匯報給Kubernetes API Server。

1)創(chuàng)建配置文件(node都要創(chuàng)建)

#node1
[root@k8s-node1 ~]# vim /opt/kubernetes/cfg/kubelet.conf
KUBELET_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--hostname-override=k8s-node1 \
--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \
--bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \
--config=/opt/kubernetes/cfg/kubelet-config.yml \
--cert-dir=/opt/kubernetes/ssl \
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.0"

#node2
[root@k8s-node2 ~]# vim /opt/kubernetes/cfg/kubelet.conf
KUBELET_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--hostname-override=k8s-node2 \
--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \
--bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \
--config=/opt/kubernetes/cfg/kubelet-config.yml \
--cert-dir=/opt/kubernetes/ssl \
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.0"

注意:?--hostname-override=不能一樣。其余位置不用改。

參數(shù)說明

?????? --hostname-override:顯示名稱,集群中唯一

?????? --network-plugin:啟用CNI

?????? --kubeconfig:空路徑,會自動生成,后面用于連接apiserver

?????? --bootstrap-kubeconfig:首次啟動向apiserver申請證書

?????? --config:配置參數(shù)文件

?????? --cert-dir:kubelet證書生成目錄

?????? --pod-infra-container-image:管理Pod網(wǎng)絡(luò)容器的鏡像

registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.0"這個鏡像最好提前pull下來。

2)拉取鏡像

#node1
[root@k8s-node1 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.0

#node2
[root@k8s-node2 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.0

3)配置參數(shù)文件(node都要配置)

[root@k8s-node1 ~]# vim /opt/kubernetes/cfg/kubelet-config.yml
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: 0.0.0.0
port: 10250
readOnlyPort: 10255
cgroupDriver: cgroupfs
clusterDNS:
- 10.0.0.2
clusterDomain: cluster.local
failSwapOn: false
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /opt/kubernetes/ssl/ca.pem
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
evictionHard:
  imagefs.available: 15%
  memory.available: 100Mi
  nodefs.available: 10%
  nodefs.inodesFree: 5%
maxOpenFiles: 1000000
maxPods: 110

node1和node2這里的內(nèi)容是一致的,所以可以只用使用scp拷到node2的?/opt/kubernetes/cfg/下

[root@k8s-node1 ~]# scp /opt/kubernetes/cfg/kubelet-config.yml k8s-node2:/opt/kubernetes/cfg/

4)生成kubelet初次加入集群引導(dǎo)kubeconfig文件

這里需要再master節(jié)點操作。

在生成kubernetes證書的目錄下執(zhí)行以下命令生成kubeconfig文件

#授權(quán)kubelet-bootstrap用戶允許請求證書
[root@k8s-master k8s]# kubectl create clusterrolebinding kubelet-bootstrap \
  --clusterrole=system:node-bootstrapper \
  --user=kubelet-bootstrap

[root@k8s-master ~]# cd ca/k8s
[root@k8s-master k8s]# KUBE_CONFIG="/opt/kubernetes/cfg/bootstrap.kubeconfig"
[root@k8s-master k8s]# KUBE_APISERVER="https://192.168.79.148:6443"

#這里的token要和上面/opt/kubernetes/cfg/token.csv的token要一樣
[root@k8s-master k8s]# TOKEN="c47ffb939f5ca36231d9e3121a252940"

執(zhí)行設(shè)置集群參數(shù)、設(shè)置客戶端認證參數(shù)、設(shè)置上下文參數(shù)、設(shè)置默認上下文四步。

#設(shè)置集群參數(shù)
[root@k8s-master k8s]# kubectl config set-cluster kubernetes \
    --certificate-authority=/opt/kubernetes/ssl/ca.pem \
    --embed-certs=true \
    --server=${KUBE_APISERVER} \
    --kubeconfig=${KUBE_CONFIG}

#設(shè)置客戶端認證參數(shù)
[root@k8s-master k8s]# kubectl config set-credentials "kubelet-bootstrap" \
    --token=${TOKEN} \
    --kubeconfig=${KUBE_CONFIG}


#設(shè)置上下文參數(shù)
[root@k8s-master k8s]# kubectl config set-context default \
    --cluster=kubernetes \
    --user="kubelet-bootstrap" \
    --kubeconfig=${KUBE_CONFIG}

#設(shè)置默認上下文
[root@k8s-master k8s]# kubectl config use-context default --kubeconfig=${KUBE_CONFIG}

5)將生成的kubeconfig拷貝到node節(jié)點

[root@k8s-master k8s]# scp /opt/kubernetes/cfg/bootstrap.kubeconfig  k8s-node1:/opt/kubernetes/cfg/

6)systemd管理kubelet(node執(zhí)行)

這一步需要在node節(jié)點操作。

[root@k8s-node1 ~]# vim /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service

[Service]
EnvironmentFile=/opt/kubernetes/cfg/kubelet.conf
ExecStart=/opt/kubernetes/bin/kubelet $KUBELET_OPTS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

這里的配置,所有node都是一樣的可以直接scp拷到node2的?/usr/lib/systemd/system/目錄下

[root@k8s-node1 ~]# scp /usr/lib/systemd/system/kubelet.service k8s-node2:/usr/lib/systemd/system/

7)啟動kubelet,設(shè)置開機自啟

#node1
[root@k8s-node1 ~]# systemctl daemon-reload 
[root@k8s-node1 ~]# systemctl start kubelet.service
[root@k8s-node1 ~]# systemctl enable kubelet.service

#node2
[root@k8s-node2 ~]# systemctl daemon-reload 
[root@k8s-node2 ~]# systemctl start kubelet.service
[root@k8s-node2 ~]# systemctl enable kubelet.service

node1?

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

node2?

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

?4、批準kubelet證書申請并加入集群

1)查看kubelet證書請求

在master上查看。

[root@k8s-master k8s]# kubectl  get csr
NAME                                                   AGE    SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-o3SeaoanVHssuQi5DVKfXQKhAJ39CROp4QidAE6u24U   2m5s   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending
node-csr-p6DbmorzFDSsdfCp7OIWfISKjKC60CKOp9dsCe9o63M   2m5s   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending

可以看到該申請是pending狀態(tài)。?

2)批準申請

kubectl? certificate? approve? ?申請的NAME

[root@k8s-master k8s]# kubectl certificate approve node-csr-o3SeaoanVHssuQi5DVKfXQKhAJ39CROp4QidAE6u24U

[root@k8s-master k8s]# kubectl certificate approve node-csr-node-csr-node-csr-node-csr-p6DbmorzFDSsdfCp7OIWfISKjKC60CKOp9dsCe9o63M


#再次查看發(fā)現(xiàn)狀態(tài)變?yōu)榱薬pprove
[root@k8s-master k8s]# kubectl  get csr
NAME                                                   AGE     SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-o3SeaoanVHssuQi5DVKfXQKhAJ39CROp4QidAE6u24U   3m44s   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued
node-csr-p6DbmorzFDSsdfCp7OIWfISKjKC60CKOp9dsCe9o63M   3m44s   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

3)查看node

[root@k8s-master k8s]# kubectl get node
NAME        STATUS   ROLES    AGE     VERSION
k8s-node1   NotReady    <none>   3h13m   v1.20.4
k8s-node2   NotReady    <none>   3h17m   v1.20.4

由于網(wǎng)絡(luò)插件還沒有部署,節(jié)點會沒有準備就緒 NotReady?

5、部署kube-proxy

負責為Pod創(chuàng)建代理服務(wù),Kubernetes Proxy會從Kubernetes API ?Server獲取所有的Service信息,并根據(jù)Service的信息創(chuàng)建代理服務(wù),實現(xiàn)Service到Pod的請求路由和轉(zhuǎn)發(fā),從而實現(xiàn)Kubernetes層級的虛擬轉(zhuǎn)發(fā)網(wǎng)絡(luò)。

1)創(chuàng)建證書請求文件(在master節(jié)點)

在/root/ca/k8s下創(chuàng)建證書請求文件

[root@k8s-master k8s]# pwd
/root/ca/k8s
[root@k8s-master k8s]# vim kube-proxy-csr.json
[root@k8s-master k8s]# cat kube-proxy-csr.json
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

生成證書

[root@k8s-master k8s]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
#查看證書生成情況
[root@k8s-master k8s]# ls kube-proxy*
kube-proxy.csr  kube-proxy-csr.json  kube-proxy-key.pem  kube-proxy.pem

2)生成kubeconfig文件(master節(jié)點)

#定義兩個變量
[root@k8s-master k8s]# KUBE_CONFIG="/opt/kubernetes/cfg/kube-proxy.kubeconfig"
[root@k8s-master k8s]# KUBE_APISERVER="https://192.168.79.148:6443"

執(zhí)行以下四條命令

#設(shè)置集群參數(shù)
kubectl config set-cluster kubernetes \
  --certificate-authority=/opt/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=${KUBE_CONFIG}

#設(shè)置客戶端認證參數(shù)
kubectl config set-credentials kube-proxy \
  --client-certificate=./kube-proxy.pem \
  --client-key=./kube-proxy-key.pem \
  --embed-certs=true \
  --kubeconfig=${KUBE_CONFIG}

#設(shè)置上下文參數(shù)
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kube-proxy \
  --kubeconfig=${KUBE_CONFIG}

#設(shè)置默認上下文
kubectl config use-context default --kubeconfig=${KUBE_CONFIG}

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維3)將?kube-proxy.kubeconfig文件傳到node節(jié)點的cfg下。

兩個node都要傳。

#傳到node1
[root@k8s-master k8s]# scp /opt/kubernetes/cfg/kube-proxy.kubeconfig  k8s-node1:/opt/kubernetes/cfg/

#傳到node2
[root@k8s-master k8s]# scp /opt/kubernetes/cfg/kube-proxy.kubeconfig  k8s-node2:/opt/kubernetes/cfg/

4)創(chuàng)建kube-proxy配置文件(node節(jié)點)

兩個node一致。

[root@k8s-node1 ~]# vim /opt/kubernetes/cfg/kube-proxy.conf
KUBE_PROXY_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--config=/opt/kubernetes/cfg/kube-proxy-config.yml"

#拷貝到node2上
[root@k8s-node1 ~]# scp /opt/kubernetes/cfg/kube-proxy.conf k8s-node2:/opt/kubernetes/cfg/

5)配置kube-proxy參數(shù)文件(node節(jié)點)

[root@k8s-node1 ~]# vim /opt/kubernetes/cfg/kube-proxy-config.yml
[root@k8s-node1 ~]# cat /opt/kubernetes/cfg/kube-proxy-config.yml
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
metricsBindAddress: 0.0.0.0:10249
clientConnection:
  kubeconfig: /opt/kubernetes/cfg/kube-proxy.kubeconfig
hostnameOverride: k8s-node1
clusterCIDR: 10.244.0.0/16

#拷貝到node2上
[root@k8s-node1 ~]# scp  kube-proxy.conf kube-proxy-config.yml kube-proxy.kubeconfig k8s-node2:/opt/kubernetes/cfg/

這里的hostnameOverride要改為自己本機的ip或者名。

修改node2上的?hostnameOverride為k8s-node2。

[root@k8s-node2 ~]# cat /opt/kubernetes/cfg/kube-proxy-config.yml 
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
metricsBindAddress: 0.0.0.0:10249
clientConnection:
  kubeconfig: /opt/kubernetes/cfg/kube-proxy.kubeconfig
hostnameOverride: k8s-node2
clusterCIDR: 10.244.0.0/16

6)system管理kube-proxy(node節(jié)點)

兩個node一致。

[root@k8s-node1 ~]# vim /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target

[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-proxy.conf
ExecStart=/opt/kubernetes/bin/kube-proxy $KUBE_PROXY_OPTS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

#拷貝到node2
[root@k8s-node1 ~]# scp /usr/lib/systemd/system/kube-proxy.service  k8s-node2:/usr/lib/systemd/system/

7)啟動并設(shè)置開機啟動

[root@k8s-node1 ~]# systemctl daemon-reload
[root@k8s-node1 ~]# systemctl enable kube-proxy
[root@k8s-node1 ~]# systemctl start kube-proxy

[root@k8s-node2 ~]# systemctl daemon-reload
[root@k8s-node2 ~]# systemctl enable kube-proxy
[root@k8s-node2 ~]# systemctl start kube-proxy

node1?

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

?node2

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

6、部署網(wǎng)絡(luò)插件(Calico)

Calico是一個純?nèi)龑拥臄?shù)據(jù)中心網(wǎng)絡(luò)方案,是目前Kubernetes主流的網(wǎng)絡(luò)方案。

1)拷貝calico.yaml文件到node(master)

鏈接:https://pan.baidu.com/s/1QhZ3zUrD8OifY5n2FZ0ZZQ?pwd=b22c?
提取碼:b22c?

并將該yaml問價拷貝到/opt/kubernetes/cfg/

2)部署Calico(master)

該插件是用yaml以pod的形式部署到node上的所以需要在master上使用kubectl工具。

這個時間可能會久一點幾分鐘也可能是十幾分鐘,直到看到status為running即可就代表部署完成。

[root@k8s-master k8s]# cd /opt/kubernetes/cfg/
[root@k8s-master cfg]# kubectl apply -f calico.yaml

#查看pods的創(chuàng)建情況
[root@k8s-master cfg]# kubectl get pods -n kube-system 
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-97769f7c7-vjzdg   1/1     Running   0          99m
calico-node-dx6sr                         0/1     Running   0          8s
calico-node-nm4t2                         1/1     Running   0          99m

二進制部署kubernetes(1.20),kubernetes,kubernetes,容器,云原生,云計算,運維

在node主機上查看ip可以看到多了一個網(wǎng)卡,這就是calico。

注:calico.yaml用到了DaemonSet控制器,意思是在所有node上都會創(chuàng)建一個該pod,以后新加入的node會自動創(chuàng)建一個calico的pod在主機上。文章來源地址http://www.zghlxwxcb.cn/news/detail-671129.html

到了這里,關(guān)于二進制部署kubernetes(1.20)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • [云原生案例2.1 ] Kubernetes的部署安裝 【單master集群架構(gòu) ---- (二進制安裝部署)】節(jié)點部分

    [云原生案例2.1 ] Kubernetes的部署安裝 【單master集群架構(gòu) ---- (二進制安裝部署)】節(jié)點部分

    Minikube是一個工具,可以在本地快速運行一個單節(jié)點微型K8S,僅用于學(xué)習(xí)、預(yù)覽K8S的一些特性使用。 Kubeadm也是一個工具,提供kubeadm init和kubeadm join,用于快速部署K8S集群,相對簡單。 生產(chǎn)首選,從官方下載發(fā)行版的二進制包,手動部署每個組件和自簽TLS證書,組成K8S集群,

    2024年02月05日
    瀏覽(48)
  • 《Kubernetes部署篇:Ubuntu20.04基于二進制安裝安裝kubeadm、kubelet和kubectl》

    《Kubernetes部署篇:Ubuntu20.04基于二進制安裝安裝kubeadm、kubelet和kubectl》

    由于客戶網(wǎng)絡(luò)處于專網(wǎng)環(huán)境下, 使用kubeadm工具安裝K8S集群 ,由于無法連通互聯(lián)網(wǎng),所有無法使用apt工具安裝kubeadm、kubelet、kubectl,當然你也可以使用apt-get工具在一臺能夠連通互聯(lián)網(wǎng)環(huán)境的服務(wù)器上下載kubeadm、kubelet、kubectl軟件包,然后拷貝到專網(wǎng)主機上,通過dpkg工具安裝

    2024年02月10日
    瀏覽(24)
  • 二進制搭建 Kubernetes v1.20

    1.網(wǎng)絡(luò)分配 2.操作系統(tǒng)初始化配置 1.etcd相關(guān)知識 etcd是CoreOS團隊于2013年6月發(fā)起的開源項目,它的目標是構(gòu)建一個高可用的分布式鍵值(key-value)數(shù)據(jù)庫。etcd內(nèi)部采用raft協(xié)議作為一致性算法,etcd是go語言編寫的。 etcd 作為服務(wù)發(fā)現(xiàn)系統(tǒng),有以下的特點: 簡單:安裝配置簡單,

    2024年02月05日
    瀏覽(22)
  • 【云原生】Kubernetes二進制--多節(jié)點Master集群高可用

    【云原生】Kubernetes二進制--多節(jié)點Master集群高可用

    作用 :實現(xiàn)高可用 apiserver 對外安全通信端口 6443 ,對內(nèi)端口 8080 1、實現(xiàn)高可用方法 etcd:etcd群集至少是3副本,奇數(shù)臺,通過raft算法,保證數(shù)據(jù)的一致性 node節(jié)點:承載業(yè)務(wù),跟Master進行對接 master節(jié)點:高可用使用keepalived+LB方案,keepalived能夠提供VIP和主備,LB實現(xiàn)負載均衡

    2024年02月04日
    瀏覽(29)
  • Kubernetes二進制部署方案

    Kubernetes二進制部署方案

    目錄 一、環(huán)境準備 2.1、主機配置 2.2、安裝 Docker 2.3、生成通信加密證書 2.3.1、生成 CA 證書(所有主機操作) 2.3.2、生成 Server 證書(所有主機) 2.3.3、生成 admin 證書(所有主機) 2.3.4、生成 proxy 證書 三、部署 Etcd 集群 3.1、在 k8s-master主機上部署 Etcd 節(jié)點 3.2、在k8s-node01 、k8

    2024年02月12日
    瀏覽(31)
  • (六)Kubernetes - 手動部署(二進制方式安裝)

    (六)Kubernetes - 手動部署(二進制方式安裝)

    可參考以下鏈接,了解nginx和keepalived,不看也不影響部署 CHAPTER 3 Web HA集群部署 - Keepalived CHAPTER 1 Web Server - nginx 安裝配置 Nginx是一個主流Web服務(wù)和反向代理服務(wù)器,這里用四層實現(xiàn)對apiserver實現(xiàn)負載均衡。 Keepalived是一個主流高可用軟件,基于VIP綁定實現(xiàn)服務(wù)器雙機熱備,在

    2024年02月04日
    瀏覽(21)
  • kubernetes 二進制方式部署 1.27.1

    序號 名稱 IP地址 CPU/顆 內(nèi)存/GB 硬盤/GB 描述 1 k8s-master01 192.168.1.11 4 4 100 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、 kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx 2 k8s-master02 192.168.1.12 4 4 100 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、 kubelet、kube-proxy、nfs-cl

    2024年02月10日
    瀏覽(38)
  • Kubernetes高可用集群二進制部署(六)Kubernetes集群節(jié)點添加

    Kubernetes高可用集群二進制部署(六)Kubernetes集群節(jié)點添加

    Kubernetes概述 使用kubeadm快速部署一個k8s集群 Kubernetes高可用集群二進制部署(一)主機準備和負載均衡器安裝 Kubernetes高可用集群二進制部署(二)ETCD集群部署 Kubernetes高可用集群二進制部署(三)部署api-server Kubernetes高可用集群二進制部署(四)部署kubectl和kube-controller-man

    2024年02月14日
    瀏覽(18)
  • Kubernetes高可用集群二進制部署(二)ETCD集群部署

    Kubernetes高可用集群二進制部署(二)ETCD集群部署

    Kubernetes概述 使用kubeadm快速部署一個k8s集群 Kubernetes高可用集群二進制部署(一)主機準備和負載均衡器安裝 Kubernetes高可用集群二進制部署(二)ETCD集群部署 Kubernetes高可用集群二進制部署(三)部署api-server Kubernetes高可用集群二進制部署(四)部署kubectl和kube-controller-man

    2024年02月14日
    瀏覽(23)
  • Kubernetes高可用集群二進制部署(Runtime Containerd)

    Kubernetes高可用集群二進制部署(Runtime Containerd)

    Kubernetes(簡稱為:k8s)是Google在2014年6月開源的一個容器集群管理系統(tǒng),使用Go語言開發(fā),用于管理云平臺中多個主機上的容器化的應(yīng)用,Kubernetes的目標是讓部署容器化的應(yīng)用簡單并且高效,Kubernetes提供了資源調(diào)度、部署管理、服務(wù)發(fā)現(xiàn)、擴容縮容、監(jiān)控,維護等一整套功能

    2024年02月08日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包