二進制方式部署k8s集群

目標任務:

1、Kubernetes集群部署架構規劃

2、部署Etcd集群

3、在Node節點安裝Docker

4、部署Flannel網絡

5、在Master節點部署組件

6、在Node節點部署組件

7、查看集群狀態

8、運行一個測試示例

9、部署Dashboard(Web UI)

?

1、Kubernetes集群部署架構規劃

操作系統:

????CentOS7.6_x64軟件版本:

????Docker 18.09.0-ce

????Kubernetes 1.11

環境:

k8s-master ????? 10.206.240.188??

k8s-node1 ???????10.206.240.111?

k8s-node2 ?????? 10.206.240.112?

機器配置要求:

????2G ?

????主機名稱必須改必須解析

????selinux

拓撲圖:


部署Etcd集群

使用cfssl來生成自簽證書,任何機器都行,證書這塊兒知道怎么生成、怎么用即可,暫且不用過多研究。


下載cfssl工具:

# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

# chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64

# mv cfssl_linux-amd64 /usr/local/bin/cfssl

# mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

# mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo


生成Etcd證書:

創建以下三個文件:

# cat ca-config.json

{

??"signing": {

????"default": {

??????"expiry": "87600h"

????},

????"profiles": {

??????"www": {

?????????"expiry": "87600h",

?????????"usages": [

????????????"signing",

????????????"key encipherment",

????????????"server auth",

????????????"client auth"

????????]

??????}

????}

??}

}


# cat ca-csr.json

{

????"CN": "etcd CA",

????"key": {

????????"algo": "rsa",

????????"size": 2048

????},

????"names": [

????????{

????????????"C": "CN",

????????????"L": "Beijing",

????????????"ST": "Beijing"

????????}

????]

}


# cat server-csr.json

{

????"CN": "etcd",

????"hosts": [

????"10.206.240.188",

????"10.206.240.189",

????"10.206.240.111"

????],

????"key": {

????????"algo": "rsa",

????????"size": 2048

????},

????"names": [

????????{

????????????"C": "CN",

????????????"L": "BeiJing",

????????????"ST": "BeiJing"

????????}

????]

}

生成證書:

#?cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

# ls *pem

ca-key.pem ?ca.pem ?server-key.pem ?server.pem安裝Etcd:

二進制包下載地址:

????https://github.com/coreos/etcd/releases/tag/v3.2.12


以下部署步驟在規劃的三個etcd節點操作一樣,唯一不同的是etcd配置文件中的服務器IP要寫當前的:

解壓二進制包:

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

# tar zxvf etcd-v3.2.12-linux-amd64.tar.gz

# mv etcd-v3.2.12-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/


創建etcd配置文件:

# cat /opt/etcd/cfg/etcd ??

#[Member]

ETCD_NAME="etcd01"

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_PEER_URLS="https://10.206.240.189:2380"?? (主機IP)

ETCD_LISTEN_CLIENT_URLS="https://10.206.240.189:2379"? (主機IP)

#[Clustering]

ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.206.240.189:2380"? (主機IP)

ETCD_ADVERTISE_CLIENT_URLS="https://10.206.240.189:2379"???? (主機IP)

ETCD_INITIAL_CLUSTER="etcd01=https://10.206.240.189:2380,etcd02=https: //10.206.240.188:2380,etcd03=https://10.206.240.111:2380"????? (集群IP)

ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

ETCD_INITIAL_CLUSTER_STATE="new"

解釋:

* ETCD_NAME節點名稱

* ETCD_DATA_DIR數據目錄

* ETCD_LISTEN_PEER_URLS集群通信監聽地址

* ETCD_LISTEN_CLIENT_URLS客戶端訪問監聽地址

* ETCD_INITIAL_ADVERTISE_PEER_URLS集群通告地址

* ETCD_ADVERTISE_CLIENT_URLS客戶端通告地址

* ETCD_INITIAL_CLUSTER集群節點地址

* ETCD_INITIAL_CLUSTER_TOKEN集群Token

* ETCD_INITIAL_CLUSTER_STATE加入集群的當前狀態,new是新集群,existing表示加入已有集群

systemd管理etcd:

# 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

ExecStart=/opt/etcd/bin/etcd \

--name=${ETCD_NAME} \

--data-dir=${ETCD_DATA_DIR} \

--listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \

--listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \

--advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \

--initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \

--initial-cluster=${ETCD_INITIAL_CLUSTER} \

--initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \

--initial-cluster-state=new \

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

Restart=on-failure

LimitNOFILE=65536

[Install]

WantedBy=multi-user.target

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

# cp ca*pem server*pem /opt/etcd/ssl

啟動并設置開啟啟動:

# systemctl start etcd

# systemctl enable etcd

都部署完成后,檢查etcd集群狀態:

# /opt/etcd/bin/etcdctl \--ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem \--endpoints="https://10.206.240.189:2379,https://10.206.240.188:2379,https://10.206.240.111:2379" \cluster-health

member 18218cfabd4e0dea is healthy: got healthy result from https://10.206.240.111:2379

member 541c1c40994c939b is healthy: got healthy result from https://10.206.240.189:2379

member a342ea2798d20705 is healthy: got healthy result from https://10.206.240.188:2379

cluster is healthy

如果輸出上面信息,就說明集群部署成功。

報錯:

Jan 15 12:06:55 k8s-master1 etcd: request cluster ID mismatch (got 99f4702593c94f98 want cdf818194e3a8c32)

解決:因為集群搭建過程,單獨啟動過單一etcd,做為測試驗證,集群內第一次啟動其他etcd服務時候,是通過發現服務引導的,所以需要刪除舊的成員信息,所有節點作以下操作

[root@k8s-master1 default.etcd]# pwd

/var/lib/etcd/default.etcd

[root@k8s-master1 default.etcd]# rm -rf member/

在Node節點安裝Docker

部署Flannel網絡

工作原理:

Falnnel要用etcd存儲自身一個子網信息,所以要保證能成功連接Etcd,寫入預定義子網段:

# /opt/etcd/bin/etcdctl \--ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem \--endpoints="https://10.206.240.189:2379,https://10.206.240.188:2379,https://10.206.240.111:2379" \set /coreos.com/network/config ?'{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'? (注意IP)

以下部署步驟在規劃的每個node節點都操作。

下載二進制包:

# wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz

# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz

# mkdir -pv /opt/kubernetes/bin

# mv flanneld mk-docker-opts.sh /opt/kubernetes/bin


配置Flannel:

# mkdir -pv /opt/kubernetes/cfg/

# cat /opt/kubernetes/cfg/flanneld

FLANNEL_OPTIONS="--etcd-endpoints=https://10.206.240.189:2379,https://10.206.240.188:2379,https://10.206.240.111:2379 -etcd-cafile=/opt/etcd/ssl/ca.pem -etcd-certfile=/opt/etcd/ssl/server.pem -etcd-keyfile=/opt/etcd/ssl/server-key.pem" (注意IP)

systemd管理Flannel:

# cat /usr/lib/systemd/system/flanneld.service

[Unit]

Description=Flanneld overlay address etcd agent

After=network-online.target network.target

Before=docker.service

[Service]

Type=notify

EnvironmentFile=/opt/kubernetes/cfg/flanneld

ExecStart=/opt/kubernetes/bin/flanneld --ip-masq $FLANNEL_OPTIONS

ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env

Restart=on-failure

[Install]

WantedBy=multi-user.target

配置Docker啟動指定子網段:

# cat /usr/lib/systemd/system/docker.service

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

EnvironmentFile=/run/flannel/subnet.env

ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS

ExecReload=/bin/kill -s HUP $MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

從其他節點拷貝證書文件到node1和2上:因為node1和2上沒有證書,但是flanel需要證書

# mkdir -pv /opt/etcd/ssl/

# scp /opt/etcd/ssl/* ?k8s-node2:/opt/etcd/ssl/

#scp /opt/etcd/ssl/* ?k8s-node1:/opt/etcd/ssl/

重啟flannel和docker:

# systemctl daemon-reload

# systemctl start flanneld

# systemctl enable flanneld

# systemctl restart docker

檢查是否生效:

# ps -ef |?grep docker

root ????20941 ????1 ?1 Jun28 ? ???????09:15:34 /usr/bin/dockerd --bip=172.17.34.1/24 --ip-masq=false --mtu=1450

# ip addr

3607: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN

????link/ether 8a:2e:3d:09:dd:82 brd ff:ff:ff:ff:ff:ff

????inet 172.17.34.0/32 scope global flannel.1

???????valid_lft forever preferred_lft forever

3608: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP

????link/ether 02:42:31:8f:d3:02 brd ff:ff:ff:ff:ff:ff

????inet 172.17.34.1/24 brd 172.17.34.255 scope global docker0

???????valid_lft forever preferred_lft forever

????inet6 fe80::42:31ff:fe8f:d302/64 scope link

???????valid_lft forever preferred_lft forever


注:

1. 確保docker0與flannel.1在同一網段。


2. 測試不同節點互通,在當前節點訪問另一個Node節點docker0 IP:

# ping 172.17.58.1

PING 172.17.58.1 (172.17.58.1) 56(84) bytes of data.

64 bytes from 172.17.58.1: icmp_seq=1 ttl=64 time=0.263 ms

64 bytes from 172.17.58.1: icmp_seq=2 ttl=64 time=0.204 ms

如果能通說明Flannel部署成功。如果不通檢查下日志:journalctl -u flannel


在Master節點部署組件

在部署Kubernetes之前一定要確保etcd、flannel、docker是正常工作的,否則先解決問題再繼續。

生成證書

創建CA證書:

# cat ca-config.json

{

??"signing": {

????"default": {

??????"expiry": "87600h"

????},

????"profiles": {

??????"kubernetes": {

?????????"expiry": "87600h",

?????????"usages": [

????????????"signing",

????????????"key encipherment",

????????????"server auth",

????????????"client auth"

????????]

??????}

????}

??}

}


# cat ca-csr.json

{

????"CN": "kubernetes",

????"key": {

????????"algo": "rsa",

????????"size": 2048

????},

????"names": [

????????{

????????????"C": "CN",

????????????"L": "Beijing",

????????????"ST": "Beijing",

????????????"O": "k8s",

????????????"OU": "System"

????????}

????]

}


# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -


生成apiserver證書:

# cat server-csr.json

{

????"CN": "kubernetes",

????"hosts": [

"10.0.0.1", ????????//這是后面dns要使用的虛 擬網絡的網關,不用改,就用這個切忌

??????"127.0.0.1",

??????"10.206.176.19",

??????"10.206.240.188",

??????"10.206.240.189",

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

????????}

????]

}


# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server


生成kube-proxy證書:

# 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"

????}

??]

}


# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy


最終生成以下證書文件:

# ls *pem

ca-key.pem ?ca.pem ?kube-proxy-key.pem ?kube-proxy.pem ?server-key.pem ?server.pem

部署apiserver組件

下載二進制包:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md下載這個包(kubernetes-server-linux-amd64.tar.gz)就夠了,包含了所需的所有組件。

# mkdir /opt/kubernetes/{bin,cfg,ssl} -pv

# tar zxvf kubernetes-server-linux-amd64.tar.gz

# cd kubernetes/server/bin

# cp kube-apiserver kube-scheduler kube-controller-manager kubectl /opt/kubernetes/bin

從生成證書的機器拷貝證書到master1,master2:

# scp server.pem ?server-key.pem ca.pem ca-key.pem k8s-master1:/opt/kubernetes/ssl/

# scp server.pem ?server-key.pem ca.pem ca-key.pem k8s-master2:/opt/kubernetes/ssl/


創建token文件,后面會講到:

# cat /opt/kubernetes/cfg/token.csv

674c457d4dcf2eefe4920d7dbb6b0ddc,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

第一列:隨機字符串,自己可生成第二列:用戶名第三列:UID第四列:用戶組


創建apiserver配置文件:

# cat /opt/kubernetes/cfg/kube-apiserver

KUBE_APISERVER_OPTS="--logtostderr=true \

--v=4 \

--etcd-servers=https://10.206.240.189:2379,https://10.206.240.188:2379,https://10.206.240.111:2379 \

--bind-address=10.206.240.189 \

--secure-port=6443 \

--advertise-address=10.206.240.189 \

--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 \

--token-auth-file=/opt/kubernetes/cfg/token.csv \

--service-node-port-range=30000-50000 \

--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"


配置好前面生成的證書,確保能連接etcd。


參數說明:

* --logtostderr啟用日志

* --v日志等級

* --etcd-servers etcd集群地址

* --bind-address監聽地址

* --secure-port https安全端口

* --advertise-address集群通告地址

* --allow-privileged啟用授權

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

* --enable-admission-plugins準入控制模塊

* --authorization-mode認證授權,啟用RBAC授權和節點自管理

* --enable-bootstrap-token-auth啟用TLS bootstrap功能,后面會講到

* --token-auth-file token文件

* --service-node-port-range Service Node類型默認分配端口范圍


systemd管理apiserver:

# 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

ExecStart=/opt/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS

Restart=on-failure

[Install]

WantedBy=multi-user.target


啟動:

# systemctl daemon-reload

# systemctl enable kube-apiserver

# systemctl start kube-apiserver

部署schduler組件

創建schduler配置文件:

# cat /opt/kubernetes/cfg/kube-scheduler


KUBE_SCHEDULER_OPTS="--logtostderr=true \

--v=4 \

--master=127.0.0.1:8080 \

--leader-elect"

參數說明:

* --master連接本地apiserver

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


systemd管理schduler組件:

# 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

ExecStart=/opt/kubernetes/bin/kube-scheduler $KUBE_SCHEDULER_OPTS

Restart=on-failure

[Install]

WantedBy=multi-user.target

啟動:

# systemctl daemon-reload

# systemctl enable kube-scheduler

# systemctl start kube-scheduler


部署controller-manager組件

創建controller-manager配置文件:

# cat /opt/kubernetes/cfg/kube-controller-manager

KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=true \

--v=4 \

--master=127.0.0.1:8080 \

--leader-elect=true \

--address=127.0.0.1 \

--service-cluster-ip-range=10.0.0.0/24 \ ???//這是后面dns要使用的虛擬網絡,不用改,就用這個 ?切忌

--cluster-name=kubernetes \

--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"


systemd管理controller-manager組件:

# 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

ExecStart=/opt/kubernetes/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS

Restart=on-failure


[Install]

WantedBy=multi-user.target


?啟動:

# systemctl daemon-reload

# systemctl enable kube-controller-manager

# systemctl start kube-controller-manager

所有組件都已經啟動成功,通過kubectl工具查看當前集群組件狀態:

# /opt/kubernetes/bin/kubectl get cs

NAME ????????????????STATUS ???MESSAGE ????????????ERROR

scheduler ???????????Healthy ??ok ?????????????????

etcd-0 ??????????????Healthy ??{"health":"true"} ??

etcd-2 ??????????????Healthy ??{"health":"true"} ??

etcd-1 ??????????????Healthy ??{"health":"true"} ??

controller-manager ??Healthy ??ok

如上輸出說明組件都正常。

在Node節點部署組件

Master apiserver啟用TLS認證后,Node節點kubelet組件想要加入集群,必須使用CA簽發的有效證書才能與apiserver通信,當Node節點很多時,簽署證書是一件很繁瑣的事情,因此有了TLS Bootstrapping機制,kubelet會以一個低權限用戶自動向apiserver申請證書,kubelet的證書由apiserver動態簽署。

認證大致工作流程如圖所示:


下面這些操作在master節點完成:

將kubelet-bootstrap用戶綁定到系統集群角色

# /opt/kubernetes/bin/kubectl create clusterrolebinding kubelet-bootstrap \

??--clusterrole=system:node-bootstrapper \

??--user=kubelet-bootstrap


創建kubeconfig文件:

在生成kubernetes證書的目錄下執行以下命令生成kubeconfig文件:


指定apiserver內網負載均衡地址

# KUBE_APISERVER="https://10.206.176.19:6443"

# BOOTSTRAP_TOKEN=674c457d4dcf2eefe4920d7dbb6b0ddc


#設置集群參數

# /opt/kubernetes/bin/kubectl config set-cluster kubernetes \

??--certificate-authority=./ca.pem \

??--embed-certs=true \

??--server=${KUBE_APISERVER} \

??--kubeconfig=bootstrap.kubeconfig


#設置客戶端認證參數

# /opt/kubernetes/bin/kubectl config set-credentials kubelet-bootstrap \

??--token=${BOOTSTRAP_TOKEN} \

??--kubeconfig=bootstrap.kubeconfig


#設置上下文參數

# /opt/kubernetes/bin/kubectl config set-context default \

??--cluster=kubernetes \

??--user=kubelet-bootstrap \

??--kubeconfig=bootstrap.kubeconfig


#設置默認上下文

# /opt/kubernetes/bin/kubectl config use-context default --kubeconfig=bootstrap.kubeconfig


#創建kube-proxy kubeconfig文件


# /opt/kubernetes/bin/kubectl config set-cluster kubernetes \

??--certificate-authority=./ca.pem \

??--embed-certs=true \

??--server=${KUBE_APISERVER} \

??--kubeconfig=kube-proxy.kubeconfig


# /opt/kubernetes/bin/kubectl config set-credentials kube-proxy \

??--client-certificate=./kube-proxy.pem \

??--client-key=./kube-proxy-key.pem \

??--embed-certs=true \

??--kubeconfig=kube-proxy.kubeconfig


# /opt/kubernetes/bin/kubectl config set-context default \

??--cluster=kubernetes \

??--user=kube-proxy \

??--kubeconfig=kube-proxy.kubeconfig


# /opt/kubernetes/bin/kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig


# ls

bootstrap.kubeconfig ?kube-proxy.kubeconfig

必看:將這兩個文件拷貝到Node節點/opt/kubernetes/cfg目錄下。


?----------------------下面這些操作在node節點完成:---------------------------

部署kubelet組件

將前面下載的二進制包中的kubelet和kube-proxy拷貝到/opt/kubernetes/bin目錄下。

創建kubelet配置文件:

# vim /opt/kubernetes/cfg/kubelet

KUBELET_OPTS="--logtostderr=true \

--v=4 \

--hostname-override=10.206.240.112?\

--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \

--bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \

--config=/opt/kubernetes/cfg/kubelet.config \

--cert-dir=/opt/kubernetes/ssl \

--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"

參數說明:

* --hostname-override在集群中顯示的主機名

* --kubeconfig指定kubeconfig文件位置,會自動生成

* --bootstrap-kubeconfig指定剛才生成的bootstrap.kubeconfig文件

* --cert-dir頒發證書存放位置

* --pod-infra-container-image管理Pod網絡的鏡像


其中/opt/kubernetes/cfg/kubelet.config配置文件如下:

# vim /opt/kubernetes/cfg/kubelet.config

kind: KubeletConfiguration

apiVersion: kubelet.config.k8s.io/v1beta1

address:?10.206.240.112

port: 10250

readOnlyPort: 10255

cgroupDriver: cgroupfs

clusterDNS: ["10.0.0.2"] ????//不要改,就是這個ip

clusterDomain: cluster.local.

failSwapOn: false

authentication:

??anonymous:

????enabled: true

??webhook:

????enabled: false


systemd管理kubelet組件:

# vim /usr/lib/systemd/system/kubelet.service

[Unit]

Description=Kubernetes Kubelet

After=docker.service

Requires=docker.service


[Service]

EnvironmentFile=/opt/kubernetes/cfg/kubelet

ExecStart=/opt/kubernetes/bin/kubelet $KUBELET_OPTS

Restart=on-failure

KillMode=process


[Install]

WantedBy=multi-user.target


啟動:

# systemctl daemon-reload

# systemctl enable kubelet

# systemctl start kubelet


在Master審批Node加入集群:

啟動后還沒加入到集群中,需要手動允許該節點才可以。在Master節點查看請求簽名的Node:

# /opt/kubernetes/bin/kubectl get csr

# /opt/kubernetes/bin/kubectl certificate approve XXXXID

# /opt/kubernetes/bin/kubectl get node

部署kube-proxy組件

創建kube-proxy配置文件:

# cat /opt/kubernetes/cfg/kube-proxy

KUBE_PROXY_OPTS="--logtostderr=true \

--v=4 \

--hostname-override=10.206.240.111?\

--cluster-cidr=10.0.0.0/24 \ ??????????//不要改,就是這個ip

--kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"


systemd管理kube-proxy組件:

# cat /usr/lib/systemd/system/kube-proxy.service

[Unit]

Description=Kubernetes Proxy

After=network.target


[Service]

EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy

ExecStart=/opt/kubernetes/bin/kube-proxy $KUBE_PROXY_OPTS

Restart=on-failure

[Install]

WantedBy=multi-user.target?

啟動:

# systemctl daemon-reload

# systemctl enable kube-proxy

# systemctl start kube-proxy

查看集群狀態

# /opt/kubernetes/bin/kubectl get node

NAME ????????????STATUS ???ROLES ????AGE ??????VERSION

10.206.240.111 ??Ready ????<none> ???28d ??????v1.11.0

10.206.240.112 ??Ready ????<none> ???28d ??????v1.11.0


# /opt/kubernetes/bin/kubectl get cs

NAME ?????????????????????STATUS ??MESSAGE ????????????ERROR

controller-manager ?? Healthy ???ok ?????????????????

scheduler ???????????????? Healthy ???ok ?????????????????

etcd-2 ?????????????????????Healthy ???{"health":"true"} ??

etcd-1 ?????????????????????Healthy ???{"health":"true"} ??

etcd-0 ?????????????????????Healthy ???{"health":"true"}

















???????




?

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

推薦閱讀更多精彩內容