無標(biāo)題文章

本文主要采取二進(jìn)制方式部署k8s集群雹熬,二進(jìn)制部署可以幫助我們了解其組件間的調(diào)用關(guān)系苛茂,也利于我們后期維護(hù)

主機(jī)環(huán)境

系統(tǒng): centos7.5 3臺(tái)

內(nèi)存: 4G

磁盤:40G

cpu 2CPU

軟件版本

k8s 1.18

docker 19-ce

主機(jī)規(guī)劃

k8s-masetr 172.25.120.17 kube-apiserver月弛,kube-controller-manager豪筝,kube-scheduler瑞你,etcd

node-1 172.25.120.18 kubelet,kube-proxy氯哮,docker etcd

node-2 172.25.120.19 kubelet,kube-proxy商佛,docker etcd

1.主機(jī)環(huán)境初始化

在3個(gè)節(jié)點(diǎn)上操作

#關(guān)閉防火墻systemctl stop firewalld ; systemctl disable firewalld#關(guān)閉selinuxsetenforce 0 ;sed -i 's/enforcing/disabled/' /etc/selinux/config#關(guān)閉swap分區(qū)swapoff -a ; sed -ri 's/.*swap.*/#&/' /etc/fstab#添加hostscat >> /etc/hosts << EOF172.25.120.17 master k8s-master172.25.120.19?node1 k8s-node1172.16.210.55 node2 k8s-node2EOF#添加防火墻轉(zhuǎn)發(fā)cat > /etc/sysctl.d/k8s.conf << EOFnet.ipv4.ip_forward = 1net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFmodprobe br_netfiltersysctl --system ##生效#時(shí)間同步y(tǒng)um install -y ntpdate? ##安裝時(shí)間同步工具ntpdate time.windows.com? #同步windwos時(shí)間服務(wù)器

2.部署etcd集群

Etcd 是一個(gè)分布式鍵值存儲(chǔ)系統(tǒng)喉钢,Kubernetes使用Etcd進(jìn)行數(shù)據(jù)存儲(chǔ)

2.1準(zhǔn)備cfssl證書生成工具

cfssl是一個(gè)開源的證書管理工具,使用json文件生成證書良姆,相比openssl更方便使用

在master上操作:

##獲取證書管理工具wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64##添加看執(zhí)行權(quán)限并放進(jìn)可執(zhí)行目錄chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64mv cfssl_linux-amd64 /usr/local/bin/cfsslmv cfssljson_linux-amd64 /usr/local/bin/cfssljsonmv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

2.2生成Etcd證書

創(chuàng)建證書目錄

mkdir -p ~/TLS/{etcd,k8s} cd ~/TLS/etcd? ##進(jìn)入證書目錄

自簽CA:

cat > ca-config.json << EOF{? "signing": {? ? "default": {? ? ? "expiry": "87600h"? ? },? ? "profiles": {? ? ? "www": {? ? ? ? "expiry": "87600h",? ? ? ? "usages": [? ? ? ? ? ? "signing",? ? ? ? ? ? "key encipherment",? ? ? ? ? ? "server auth",? ? ? ? ? ? "client auth"? ? ? ? ]? ? ? }? ? }? }}EOFcat > ca-csr.json << EOF{? ? "CN": "etcd CA",? ? "key": {? ? ? ? "algo": "rsa",? ? ? ? "size": 2048? ? },? ? "names": [? ? ? ? {? ? ? ? ? ? "C": "CN",? ? ? ? ? ? "L": "Beijing",? ? ? ? ? ? "ST": "Beijing"? ? ? ? }? ? ]}EOF

生成證書:

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -ls *pem ##可以看到當(dāng)前目錄生成了兩個(gè)證書文件ca-key.pem? ca.pem

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

創(chuàng)建證書申請(qǐng)文件:

cat > server-csr.json << EOF{? ? "CN": "etcd",? ? "hosts": [? ? "172.16.210.53",? ? "172.16.210.54",? ? "172.16.210.55"? ? ],? ? "key": {? ? ? ? "algo": "rsa",? ? ? ? "size": 2048? ? },? ? "names": [? ? ? ? {? ? ? ? ? ? "C": "CN",? ? ? ? ? ? "L": "BeiJing",? ? ? ? ? ? "ST": "BeiJing"? ? ? ? }? ? ]}EOF

生成證書:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare serverls server*pem? ##可以看到生成了兩個(gè)sever證書server-key.pem? server.pem

2.3下載etcd二進(jìn)制文件

文件地址:https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz

以下操作在master上操作,待會(huì)將master生成的所有文件拷貝到node1和node2:

wget https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz ##獲取二進(jìn)制文件

2.4部署etcd集群

1.創(chuàng)建工作目錄并解壓二進(jìn)制文件

mkdir /opt/etcd/{bin,cfg,ssl} -ptar zxvf etcd-v3.4.9-linux-amd64.tar.gzmv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/

2.創(chuàng)建etcd配置文件

cat > /opt/etcd/cfg/etcd.conf << EOF#[Member]ETCD_NAME="etcd-1"ETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="https://172.16.210.53:2380"ETCD_LISTEN_CLIENT_URLS="https://172.16.210.53:2379"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.16.210.53:2380"ETCD_ADVERTISE_CLIENT_URLS="https://172.16.210.53:2379"ETCD_INITIAL_CLUSTER="etcd-1=https://172.16.210.53:2380,etcd-2=https://172.16.210.54:2380,etcd-3=https://172.16.210.55:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="new"EOF

參數(shù)詳解:

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

ETCD_LISTEN_PEER_URLS:集群通信監(jiān)聽地址

ETCD_LISTEN_CLIENT_URLS:客戶端訪問監(jiān)聽地址

ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址

ETCD_ADVERTISE_CLIENT_URLS:客戶端通告地址

ETCD_INITIAL_CLUSTER:集群節(jié)點(diǎn)地址

ETCD_INITIAL_CLUSTER_TOKEN:集群Token

ETCD_INITIAL_CLUSTER_STATE:加入集群的當(dāng)前狀態(tài)肠虽,new是新集群,existing表示加入已有集群

3.配置systemd管理etcd

cat>/usr/lib/systemd/system/etcd.service<<EOF[Unit]Description=Etcd ServerAfter=network.targetAfter=network-online.targetWants=network-online.target[Service]Type=notifyEnvironmentFile=/opt/etcd/cfg/etcd.confExecStart=/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=zapRestart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.targetEOF

4. 拷貝剛才生成的證書

把剛才生成的證書拷貝到配置文件中的路徑:

cp~/TLS/etcd/ca*pem~/TLS/etcd/server*pem/opt/etcd/ssl/

5.將master生成的所有文件拷貝到其他節(jié)點(diǎn)

scp-r/opt/etcd/172.16.210.54:/opt/scp/usr/lib/systemd/system/etcd.service172.16.210.54:/usr/lib/systemd/system/scp-r/opt/etcd/172.16.210.55:/opt/scp/usr/lib/systemd/system/etcd.service172.16.210.55:/usr/lib/systemd/system/

6.在node1和node2分別修改etcd.conf配置文件中的節(jié)點(diǎn)名稱和當(dāng)前服務(wù)器IP

sed -i '4,8s/172.16.210.53/172.16.210.54/' /opt/etcd/cfg/etcd.conf? ; sed -i '2s/etcd-1/etcd-2/'? /opt/etcd/cfg/etcd.conf ###在node1執(zhí)行sed -i '4,8s/172.16.210.53/172.16.210.55/' /opt/etcd/cfg/etcd.conf? ; sed -i '2s/etcd-1/etcd-3/'? /opt/etcd/cfg/etcd.conf ###在node2執(zhí)行

7.啟動(dòng)3個(gè)節(jié)點(diǎn)的etcd并加入開機(jī)自啟

在三各節(jié)點(diǎn)操作

systemctl daemon-reloadsystemctl start etcdsystemctl enable etcd

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

[root@master~]#ETCDCTL_API=3/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://172.16.210.53:2379,https://172.16.210.54:2379,https://172.16.210.55:2379"endpoint healthhttps://172.16.210.54:2379ishealthy:successfully committed proposal:took=14.194738mshttps://172.16.210.55:2379ishealthy:successfully committed proposal:took=14.97292mshttps://172.16.210.53:2379ishealthy:successfully committed proposal:took=14.847968ms

出現(xiàn)successfully,表面etcd部署成功,如果有異常情況可以使用systemctl stautus etcd -l進(jìn)一步查看報(bào)錯(cuò)信息

3.安裝Docker

可以使用yum安裝,這次我們采用二進(jìn)制的方式

以下所有操作在所有節(jié)點(diǎn)

3.1獲取docker安裝包

wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

3.2解壓docker二進(jìn)制包

tar zxvf docker-19.03.9.tgzmv docker/* /usr/bin

3.3配置systemd管理docker

cat > /usr/lib/systemd/system/docker.service << EOF[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target[Service]Type=notifyExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityTimeoutStartSec=0Delegate=yesKillMode=processRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.targetEOF

3.4配置docker加速器

mkdir/etc/dockercat>/etc/docker/daemon.json<<EOF{"registry-mirrors":["https://jo6348gu.mirror.aliyuncs.com"]}EOF

3.5啟動(dòng)docker并加入開機(jī)自啟

systemctl daemon-reload systemctl start dockersystemctl enable docker

4.部署master

以下操作在master上

4.1 生成kube-apiserver證書

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

cd TLS/k8scat > ca-config.json << EOF{? "signing": {? ? "default": {? ? ? "expiry": "87600h"? ? },? ? "profiles": {? ? ? "kubernetes": {? ? ? ? "expiry": "87600h",? ? ? ? "usages": [? ? ? ? ? ? "signing",? ? ? ? ? ? "key encipherment",? ? ? ? ? ? "server auth",? ? ? ? ? ? "client auth"? ? ? ? ]? ? ? }? ? }? }}EOFcat > ca-csr.json << EOF{? ? "CN": "kubernetes",? ? "key": {? ? ? ? "algo": "rsa",? ? ? ? "size": 2048? ? },? ? "names": [? ? ? ? {? ? ? ? ? ? "C": "CN",? ? ? ? ? ? "L": "Beijing",? ? ? ? ? ? "ST": "Beijing",? ? ? ? ? ? "O": "k8s",? ? ? ? ? ? "OU": "System"? ? ? ? }? ? ]}EOF

生成證書:

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -ls *pemca-key.pem? ca.pem? ##可以看到生成了兩個(gè)證書

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

創(chuàng)建證書申請(qǐng)文件:

cat > server-csr.json << EOF{? ? "CN": "kubernetes",? ? "hosts": [? ? ? "10.0.0.1",? ? ? "127.0.0.1",? ? ? "172.16.210.53",? ? ? "172.16.210.54",? ? ? "172.16.210.55",? ? ? "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"? ? ? ? }? ? ]}EOF

生成證書:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare serverls server*pemserver-key.pem? server.pem ##可以看到又生成兩個(gè)server證書

4.2 從Github下載k8s二進(jìn)制文件并解壓

1.獲取二進(jìn)制包

wget? https://dl.k8s.io/v1.18.3/kubernetes-server-linux-amd64.tar.gz

2.解壓二進(jìn)制包

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs} tar zxvf kubernetes-server-linux-amd64.tar.gzcd kubernetes/server/bincp kube-apiserver kube-scheduler kube-controller-manager /opt/kubernetes/bincp kubectl /usr/bin/

4.3部署kube-apiserver

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

cat>/opt/kubernetes/cfg/kube-apiserver.conf<<EOFKUBE_APISERVER_OPTS="--logtostderr=false\\--v=4\\--log-dir=/opt/kubernetes/logs \\--etcd-servers=https://172.16.210.53:2379,https://172.16.210.54:2379,https://172.16.210.55:2379\\--bind-address=172.16.210.53\\--secure-port=6443\\--advertise-address=172.16.210.53\\--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 \\--etcd-cafile=/opt/etcd/ssl/ca.pem \\--etcd-certfile=/opt/etcd/ssl/server.pem \\--etcd-keyfile=/opt/etcd/ssl/server-key.pem \\--audit-log-maxage=30\\--audit-log-maxbackup=3\\--audit-log-maxsize=100\\--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"EOF

參數(shù)詳解:

–logtostderr:?jiǎn)⒂萌罩?/p>

—v:日志等級(jí)

–log-dir:日志目錄

–etcd-servers:etcd集群地址

–bind-address:監(jiān)聽地址

–secure-port:https安全端口

–advertise-address:集群通告地址

–allow-privileged:?jiǎn)⒂檬跈?quán)

–service-cluster-ip-range:Service虛擬IP地址段

–enable-admission-plugins:準(zhǔn)入控制模塊

–authorization-mode:認(rèn)證授權(quán)玛追,啟用RBAC授權(quán)和節(jié)點(diǎn)自管理

–enable-bootstrap-token-auth:?jiǎn)⒂肨LS bootstrap機(jī)制

–token-auth-file:bootstrap token文件

–service-node-port-range:Service nodeport類型默認(rèn)分配端口范圍

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

–tls-xxx-file:apiserver https證書

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

–audit-log-xxx:審計(jì)日志

2. 拷貝剛才生成的證書

把剛才生成的證書拷貝到配置文件中的路徑:

cp~/TLS/k8s/ca*pem~/TLS/k8s/server*pem/opt/kubernetes/ssl/

3. 啟用 TLS Bootstrapping 機(jī)制

TLS Bootstraping:Master apiserver啟用TLS認(rèn)證后税课,Node節(jié)點(diǎn)kubelet和kube-proxy要與kube-apiserver進(jìn)行通信,必須使用CA簽發(fā)的有效證書才可以痊剖,當(dāng)Node節(jié)點(diǎn)很多時(shí)韩玩,這種客戶端證書頒發(fā)需要大量工作,同樣也會(huì)增加集群擴(kuò)展復(fù)雜度陆馁。為了簡(jiǎn)化流程找颓,Kubernetes引入了TLS bootstraping機(jī)制來自動(dòng)頒發(fā)客戶端證書,kubelet會(huì)以一個(gè)低權(quán)限用戶自動(dòng)向apiserver申請(qǐng)證書叮贩,kubelet的證書由apiserver動(dòng)態(tài)簽署击狮。所以強(qiáng)烈建議在Node上使用這種方式,目前主要用于kubelet妇汗,kube-proxy還是由我們統(tǒng)一頒發(fā)一個(gè)證書帘不。

TLS bootstraping 工作流程:

image.png

創(chuàng)建上述配置文件中token文件:

cat>/opt/kubernetes/cfg/token.csv<<EOFb1dc586d69159ff4e3ef7efa9db60e48,10001,"system:node-bootstrapper"EOF

格式:token,用戶名杨箭,UID寞焙,用戶組

token也可自行生成替換:

head-c16/dev/urandom|od-An-t x|tr-d' '

4. systemd管理apiserver

cat>/usr/lib/systemd/system/kube-apiserver.service<<EOF[Unit]Description=KubernetesAPIServerDocumentation=https://github.com/kubernetes/kubernetes[Service]EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.confExecStart=/opt/kubernetes/bin/kube-apiserver \$KUBE_APISERVER_OPTSRestart=on-failure[Install]WantedBy=multi-user.targetEOF

5. 啟動(dòng)并設(shè)置開機(jī)啟動(dòng)

systemctl daemon-reloadsystemctl start kube-apiserversystemctl enable kube-apiserver

6. 授權(quán)kubelet-bootstrap用戶允許請(qǐng)求證書

kubectl create clusterrolebinding kubelet-bootstrap \--clusterrole=system:node-bootstrapper \--user=kubelet-bootstrap

4.4 部署kube-controller-manager

創(chuàng)建配置文件

cat>/opt/kubernetes/cfg/kube-controller-manager.conf<<EOFKUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false\\--v=4\\--log-dir=/opt/kubernetes/logs \\--leader-elect=true\\--master=127.0.0.1:8080\\--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"EOF

–master:通過本地非安全本地端口8080連接apiserver。

–leader-elect:當(dāng)該組件啟動(dòng)多個(gè)時(shí)互婿,自動(dòng)選舉(HA)

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

2. systemd管理controller-manager

cat>/usr/lib/systemd/system/kube-controller-manager.service<<EOF[Unit]Description=KubernetesControllerManagerDocumentation=https://github.com/kubernetes/kubernetes[Service]EnvironmentFile=/opt/kubernetes/cfg/kube-controller-manager.confExecStart=/opt/kubernetes/bin/kube-controller-manager \$KUBE_CONTROLLER_MANAGER_OPTSRestart=on-failure[Install]WantedBy=multi-user.targetEOF

3.啟動(dòng)并設(shè)置開機(jī)啟動(dòng)

systemctl daemon-reloadsystemctl start kube-controller-managersystemctl enable kube-controller-manager

4.6 部署kube-scheduler

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

cat>/opt/kubernetes/cfg/kube-scheduler.conf<<EOFKUBE_SCHEDULER_OPTS="--logtostderr=false \

--v=2 \

--log-dir=/opt/kubernetes/logs \

--leader-elect \

--master=127.0.0.1:8080 \

--bind-address=127.0.0.1"EOF

–master:通過本地非安全本地端口8080連接apiserver。

–leader-elect:當(dāng)該組件啟動(dòng)多個(gè)時(shí)慈参,自動(dòng)選舉(HA)

2. systemd管理scheduler

cat>/usr/lib/systemd/system/kube-scheduler.service<<EOF[Unit]Description=KubernetesSchedulerDocumentation=https://github.com/kubernetes/kubernetes[Service]EnvironmentFile=/opt/kubernetes/cfg/kube-scheduler.confExecStart=/opt/kubernetes/bin/kube-scheduler \$KUBE_SCHEDULER_OPTSRestart=on-failure[Install]WantedBy=multi-user.targetEOF

3.啟動(dòng)并設(shè)置開機(jī)啟動(dòng)

systemctl daemon-reloadsystemctl start kube-schedulersystemctl enable kube-scheduler

4. 查看集群狀態(tài)

所有組件都已經(jīng)啟動(dòng)成功呛牲,通過kubectl get cs命令查看當(dāng)前集群組件狀態(tài):

kubectlgetcsNAMESTATUSMESSAGEERRORcontroller-manager? Healthy? ok? ? ? ? ? ? ? ? ? scheduler? ? ? ? ? ? Healthy? ok? ? ? ? ? ? ? ? ? etcd-0Healthy{"health":"true"}etcd-1Healthy{"health":"true"}etcd-2Healthy{"health":"true"}

五、部署Worker Node

下面還是在master節(jié)點(diǎn)上操作驮配,即同時(shí)作為Worker Node

5.1 拷貝二進(jìn)制文件

cd ~/kubernetes/server/bincp kubelet kube-proxy /opt/kubernetes/bin

5.2 部署kubelet

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

cat>/opt/kubernetes/cfg/kubelet.conf<<EOFKUBELET_OPTS="--logtostderr=false\\--v=4\\--log-dir=/opt/kubernetes/logs \\--hostname-override=k8s-master \\--network-plugin=cni \\--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=lizhenliang/pause-amd64:3.0"EOF

參數(shù)詳解:

–hostname-override:顯示名稱娘扩,集群中唯一

–network-plugin:?jiǎn)⒂肅NI

–kubeconfig:空路徑着茸,會(huì)自動(dòng)生成,后面用于連接apiserver

–bootstrap-kubeconfig:首次啟動(dòng)向apiserver申請(qǐng)證書

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

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

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

2. 創(chuàng)建配置參數(shù)yaml文件

cat>/opt/kubernetes/cfg/kubelet-config.yml<<EOFkind:KubeletConfigurationapiVersion:kubelet.config.k8s.io/v1beta1address:0.0.0.0port:10250readOnlyPort:10255cgroupDriver:cgroupfsclusterDNS:-10.0.0.2clusterDomain:cluster.local failSwapOn:falseauthentication:anonymous:enabled:falsewebhook:cacheTTL:2m0s? ? enabled:truex509:clientCAFile:/opt/kubernetes/ssl/ca.pem authorization:mode:Webhook? webhook:cacheAuthorizedTTL:5m0s? ? cacheUnauthorizedTTL:30sevictionHard:imagefs.available:15%memory.available:100Mi? nodefs.available:10%nodefs.inodesFree:5%maxOpenFiles:1000000maxPods:110EOF

3. 生成bootstrap.kubeconfig文件

##設(shè)置環(huán)境變量KUBE_APISERVER="https://172.16.210.53:6443" # apiserver IP:PORTTOKEN="b1dc586d69159ff4e3ef7efa9db60e48" # 與token.csv里保持一致# 生成 kubelet bootstrap kubeconfig 配置文件kubectl config set-cluster kubernetes \? --certificate-authority=/opt/kubernetes/ssl/ca.pem \? --embed-certs=true \? --server=${KUBE_APISERVER} \? --kubeconfig=bootstrap.kubeconfigkubectl config set-credentials "kubelet-bootstrap" \? --token=${TOKEN} \? --kubeconfig=bootstrap.kubeconfigkubectl config set-context default \? --cluster=kubernetes \? --user="kubelet-bootstrap" \? --kubeconfig=bootstrap.kubeconfigkubectl config use-context default --kubeconfig=bootstrap.kubeconfig

拷貝到配置文件路徑:

cp bootstrap.kubeconfig /opt/kubernetes/cfg

4. systemd管理kubelet

cat>/usr/lib/systemd/system/kubelet.service<<EOF[Unit]Description=KubernetesKubeletAfter=docker.service[Service]EnvironmentFile=/opt/kubernetes/cfg/kubelet.confExecStart=/opt/kubernetes/bin/kubelet \$KUBELET_OPTSRestart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.targetEOF

5. 啟動(dòng)并設(shè)置開機(jī)啟動(dòng)

systemctl daemon-reloadsystemctl start kubeletsystemctl enable kubelet

5.3 批準(zhǔn)kubelet證書申請(qǐng)并加入集群

# 查看kubelet證書請(qǐng)求kubectl get csrNAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? AGE? SIGNERNAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REQUESTOR? ? ? ? ? CONDITIONnode-csr-d-UyqVObT-tnWdXd881Ppc3oNVr6xkCBXV7VRlWyhf8? 30s? kubernetes.io/kube-apiserver-client-kubelet? kubelet-bootstrap? Pending# 批準(zhǔn)申請(qǐng)kubectl certificate approve node-csr-d-UyqVObT-tnWdXd881Ppc3oNVr6xkCBXV7VRlWyhf8# 查看節(jié)點(diǎn)kubectl get nodeNAME? ? ? ? STATUS? ? ROLES? ? AGE? VERSIONk8s-master? NotReady? ? 15s? v1.18.3? ##由于沒有部署網(wǎng)絡(luò)插件,所以節(jié)點(diǎn)是NotReady

5.4 部署kube-proxy

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

cat>/opt/kubernetes/cfg/kube-proxy.conf<<EOFKUBE_PROXY_OPTS="--logtostderr=false\\--v=4\\--log-dir=/opt/kubernetes/logs \\--config=/opt/kubernetes/cfg/kube-proxy-config.yml"EOF

2. 配置參數(shù)文件

cat>/opt/kubernetes/cfg/kube-proxy-config.yml<<EOFkind:KubeProxyConfigurationapiVersion:kubeproxy.config.k8s.io/v1alpha1bindAddress:0.0.0.0metricsBindAddress:0.0.0.0:10249clientConnection:kubeconfig:/opt/kubernetes/cfg/kube-proxy.kubeconfighostnameOverride:k8s-masterclusterCIDR:10.0.0.0/24EOF

3. 生成kube-proxy.kubeconfig文件

生成kube-proxy證書:

# 切換工作目錄cd ~/TLS/k8s# 創(chuàng)建證書請(qǐng)求文件cat > kube-proxy-csr.json << EOF{? "CN": "system:kube-proxy",? "hosts": [],? "key": {? ? "algo": "rsa",? ? "size": 2048? },? "names": [? ? {? ? ? "C": "CN",? ? ? "L": "BeiJing",? ? ? "ST": "BeiJing",? ? ? "O": "k8s",? ? ? "OU": "System"? ? }? ]}EOF# 生成證書cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxyls kube-proxy*pemkube-proxy-key.pem? kube-proxy.pem? ##可以看到生成了兩個(gè)kube-proxy的證書文件

生成kubeconfig文件

#創(chuàng)建環(huán)境變量KUBE_APISERVER="https://172.16.210.53:6443"kubectl configset-cluster kubernetes \--certificate-authority=/opt/kubernetes/ssl/ca.pem \--embed-certs=true\--server=${KUBE_APISERVER}\--kubeconfig=kube-proxy.kubeconfigkubectl configset-credentials kube-proxy \--client-certificate=./kube-proxy.pem \--client-key=./kube-proxy-key.pem \--embed-certs=true\--kubeconfig=kube-proxy.kubeconfigkubectl configset-contextdefault\--cluster=kubernetes \--user=kube-proxy \--kubeconfig=kube-proxy.kubeconfigkubectl config use-contextdefault--kubeconfig=kube-proxy.kubeconfig

拷貝到配置文件指定路徑:

cp kube-proxy.kubeconfig /opt/kubernetes/cfg/

4. systemd管理kube-proxy

cat>/usr/lib/systemd/system/kube-proxy.service<<EOF[Unit]Description=KubernetesProxyAfter=network.target[Service]EnvironmentFile=/opt/kubernetes/cfg/kube-proxy.confExecStart=/opt/kubernetes/bin/kube-proxy \$KUBE_PROXY_OPTSRestart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.targetEOF

5. 啟動(dòng)并設(shè)置開機(jī)啟動(dòng)

systemctl daemon-reloadsystemctl start kube-proxysystemctl enable kube-proxy

5.5 部署CNI網(wǎng)絡(luò)

1.先下載CNI二進(jìn)制文件:

wget https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz

2.解壓二進(jìn)制包并移動(dòng)到默認(rèn)工作目錄

mkdir -p /opt/cni/bintar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin

5.5部署CNI網(wǎng)絡(luò)

獲取flanel網(wǎng)絡(luò)yaml文件,并修改鏡像地址

echo"151.101.76.133 raw.githubusercontent.com">>/etc/hostswget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlsed-i-r"s#quay.io/coreos/flannel:.*-amd64#lizhenliang/flannel:v0.12.0-amd64#g"kube-flannel.yml##默認(rèn)鏡像地址無法訪問琐旁,修改為docker hub鏡像倉(cāng)庫(kù)涮阔。

開始部署CNI網(wǎng)絡(luò):

kubectl apply-f kube-flannel.yml##查看pod是否運(yùn)行成功kubectlgetpods-n kube-systemNAMEREADYSTATUSRESTARTSAGEkube-flannel-ds-amd64-p9tdp1/1Running0##運(yùn)行成功后,再查看節(jié)點(diǎn)是否運(yùn)行正常kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8s-master? Ready<none>19m? v1.18.3

5.6 授權(quán)apiserver訪問kubelet

cat>apiserver-to-kubelet-rbac.yaml<<EOFapiVersion:rbac.authorization.k8s.io/v1kind:ClusterRolemetadata:annotations:rbac.authorization.kubernetes.io/autoupdate:"true"labels:kubernetes.io/bootstrapping:rbac-defaults? name:system:kube-apiserver-to-kubeletrules:-apiGroups:-""resources:-nodes/proxy-nodes/stats-nodes/log-nodes/spec-nodes/metrics-pods/log? ? verbs:-"*"---apiVersion:rbac.authorization.k8s.io/v1kind:ClusterRoleBindingmetadata:name:system:kube-apiservernamespace:""roleRef:apiGroup:rbac.authorization.k8s.io? kind:ClusterRole? name:system:kube-apiserver-to-kubeletsubjects:-apiGroup:rbac.authorization.k8s.io? ? kind:User? ? name:kubernetesEOFkubectl apply-f apiserver-to-kubelet-rbac.yaml

5.7增加worke 節(jié)點(diǎn)

1. 拷貝已部署好的Node相關(guān)文件到新節(jié)點(diǎn)

在master節(jié)點(diǎn)將Worker Node涉及文件拷貝到節(jié)點(diǎn)172.16.210..54/55

scp-r/opt/kubernetes root@172.16.210.54:/opt/scp-r/usr/lib/systemd/system/{kubelet,kube-proxy}.service root@172.16.210.54:/usr/lib/systemd/systemscp-r/opt/cni/root@172.16.210.54:/opt/scp/opt/kubernetes/ssl/ca.pem root@172.16.210.54:/opt/kubernetes/ssl

2. 刪除kubelet證書和kubeconfig文件

rm -f /opt/kubernetes/cfg/kubelet.kubeconfig rm -f /opt/kubernetes/ssl/kubelet*

3. 修改主機(jī)名

sed -i 's/k8s-master/k8s-node1/g' /opt/kubernetes/cfg/kubelet.conf /opt/kubernetes/cfg/kube-proxy-config.yml? ##加入node2的主機(jī)只需要把這條命令的k8s-node1改成k8s-node2即可

4. 啟動(dòng)并設(shè)置開機(jī)啟動(dòng)

systemctl daemon-reloadsystemctl start kubeletsystemctl enable kubeletsystemctl start kube-proxysystemctl enable kube-proxy

5.在Master上批準(zhǔn)新Node kubelet證書申請(qǐng)

kubectlgetcsrNAMEAGESIGNERNAMEREQUESTORCONDITIONnode-csr--t2cjSYX0z7ba4Tyh4GCnngZaGBUwmAHyY1xuxU40j028s? kubernetes.io/kube-apiserver-client-kubelet? kubelet-bootstrapPendingkubectl certificate approve node-csr--t2cjSYX0z7ba4Tyh4GCnngZaGBUwmAHyY1xuxU40j0

6. 查看Node狀態(tài)

kubectl get nodesNAME? ? ? ? STATUS? ROLES? ? AGE? ? VERSIONk8s-master? Ready? ? ? 46m? ? v1.18.3k8s-node1? ? Ready? ? ? 8m57s? v1.18.3k8s-node2? ? Ready? ? ? 3m59s? v1.18.3

Node2(172.16.210.55 )節(jié)點(diǎn)同上。記得修改主機(jī)名

六灰殴、部署Dashboard和CoreDNS

Dashboard的部署可以看我另一篇文檔,這里就不部署了

http://www.reibang.com/p/6bafe568f103

部署CoreDNS

CoreDNS用于集群內(nèi)部Service名稱解析

kubectl apply-f coredns.yaml kubectlgetpods-n kube-system ##查看coredns的pod是否運(yùn)行正常NAMEREADYSTATUSRESTARTSAGEcoredns-5ffbfd976d-rkcmt1/1Running023skube-flannel-ds-amd64-2kmcm1/1Running014mkube-flannel-ds-amd64-p9tdp1/1Running039mkube-flannel-ds-amd64-zg7xz1/1Running019m

測(cè)試

kubectl run-it--rm dns-test--image=busybox:1.28.4shIf you don't see a command prompt,trypressing enter./# nslookup kubernetesServer:10.0.0.2Address1:10.0.0.2kube-dns.kube-system.svc.cluster.localName:kubernetesAddress1:10.0.0.1kubernetes.default.svc.cluster.local

能正常解析,說明沒問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敬特,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牺陶,更是在濱河造成了極大的恐慌伟阔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掰伸,死亡現(xiàn)場(chǎng)離奇詭異皱炉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)狮鸭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門娃承,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怕篷,你說我怎么就攤上這事历筝。” “怎么了廊谓?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵梳猪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蒸痹,道長(zhǎng)春弥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任叠荠,我火速辦了婚禮匿沛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榛鼎。我一直安慰自己逃呼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布者娱。 她就那樣靜靜地躺著抡笼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黄鳍。 梳的紋絲不亂的頭發(fā)上推姻,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音框沟,去河邊找鬼藏古。 笑死增炭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拧晕。 我是一名探鬼主播弟跑,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼防症!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哎甲,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蔫敲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后炭玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈嘿,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吞加,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了裙犹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衔憨,死狀恐怖叶圃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情践图,我是刑警寧澤掺冠,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站码党,受9級(jí)特大地震影響德崭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揖盘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一眉厨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兽狭,春花似錦憾股、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至销钝,卻和暖如春有咨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒸健。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工座享, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婉商,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓渣叛,卻偏偏與公主長(zhǎng)得像丈秩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淳衙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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