日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
CentOS7.3下DockerKubernetes1.8.3集群環(huán)境搭建

部署環(huán)境

此次部署kubernetes1.8.3版本使用兩臺機(jī)器進(jìn)行操作,一臺做為Master節(jié)點(diǎn),一臺作為Node節(jié)點(diǎn)。部署流程及配置與正式環(huán)境下是一致的。

創(chuàng)新互聯(lián)公司于2013年開始,先為貢覺等服務(wù)建站,貢覺等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為貢覺企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

Kubernetes Master節(jié)點(diǎn):10.0.11.222

Kubernetes Node節(jié)點(diǎn):10.0.11.221

部署軟件

centos:CentOS 7.3

Docker:17.03.2-ce

Kubernetes:1.8.3

etcd:3.2.7

flannel:v0.7.1

準(zhǔn)備工作

master節(jié)點(diǎn)、node節(jié)點(diǎn)都要做這些準(zhǔn)備工作。

關(guān)閉防火墻

# 關(guān)閉防火墻
[root@mimo222 ~]# systemctl stop firewalld

# 禁用防火墻
[root@mimo222 ~]# systemctl disable firewalld

禁用selinux

# 設(shè)置selinux為關(guān)閉
[root@mimo222 ~]# setenforce 0

# 打開selinux配置文件
[root@mimo222 ~]# vim /etc/selinux/config

# SELINUX配置項(xiàng)修改為disabled
SELINUX=disabled

創(chuàng)建驗(yàn)證

此次安裝kubernetes1.8.3,我們使用基于CA簽名的數(shù)字證書認(rèn)證方式,通過cfssl進(jìn)行證書生成。此次安裝是單Master節(jié)點(diǎn),因此證書的生成都在Master節(jié)點(diǎn)完成。如果你安裝的是多Master節(jié)點(diǎn),那么可在其中一個(gè)Master節(jié)點(diǎn)生成證書,然后同步將證書拷貝到其他的Master(注意:多個(gè)Master節(jié)點(diǎn)的證書目錄一定要一致,以避免不必要的問題出現(xiàn))。最后,在配置Node節(jié)點(diǎn)時(shí),我們可以從Master節(jié)點(diǎn)拷貝Node節(jié)點(diǎn)需要的證書。

安裝 cfssl

[root@mimo222 ~]# mkdir -p /opt/local/cfssl

[root@mimo222 ~]# cd /opt/local/cfssl

[root@mimo222 ~]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@mimo222 ~]# mv cfssl_linux-amd64 cfssl

[root@mimo222 ~]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@mimo222 ~]# mv cfssljson_linux-amd64 cfssljson

[root@mimo222 ~]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@mimo222 ~]# mv cfssl-certinfo_linux-amd64 cfssl-certinfo

[root@mimo222 ~]# chmod +x *

安裝cfssl需要下載上面命令中的三個(gè)文件,如果通過wget無法下載,可通過直接在網(wǎng)頁上訪問該鏈接下載,然后拷貝到/opt/local/cfssl目錄。注意修改文件權(quán)限。

創(chuàng)建 CA 證書配置

創(chuàng)建ssl目錄:

[root@mimo222 ~]# mkdir /opt/ssl

[root@mimo222 ~]# cd /opt/ssl

/opt/ssl目錄下創(chuàng)建config.json文件:

vi  config.json

{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}

/opt/ssl目錄下創(chuàng)建csr.json 文件:

vi csr.json

{
  "CN": "kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShenZhen",
      "L": "ShenZhen",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

生成 CA 證書和私鑰

[root@mimo222 ~]# cd /opt/ssl/

# 生成CA證書和私鑰
[root@mimo222 ~]# /opt/local/cfssl/cfssl gencert -initca csr.json | /opt/local/cfssl/cfssljson -bare ca

[root@mimo222 ~]# ls -lt
total 5
-rw-r--r--  1 root root 1005 Dec 14 17:48 ca.csr
-rw-------  1 root root 1679 Dec 14 17:48 ca-key.pem
-rw-r--r--  1 root root 1363 Dec 14 17:48 ca.pem
-rw-r--r--. 1 root root  292 Dec 14 17:45 config.json
-rw-r--r--  1 root root  210 Dec 14 17:48 csr.json

分發(fā)證書

我們將所有kubernetes相關(guān)的證書都保存到/etc/kubernetes/ssl目錄,方便管理。

# 創(chuàng)建證書目錄
[root@mimo222 ~]# mkdir -p /etc/kubernetes/ssl

# 拷貝所有文件到目錄下
[root@mimo222 ~]# cp *.pem /etc/kubernetes/ssl
[root@mimo222 ~]# cp ca.csr /etc/kubernetes/ssl

# 這里要將文件拷貝到所有的k8s Master機(jī)器上
# 這里演示一下多Master節(jié)點(diǎn)時(shí)證書的保存方式,在每次生成證書之后,都可以通過下面的方式將證書拷貝
# 到遠(yuǎn)程Master節(jié)點(diǎn),保證數(shù)據(jù)的同步。下面其他證書方式一樣,就不再寫了。
[root@mimo222 ~]# scp *.pem xx.xx.xx.xx:/etc/kubernetes/ssl/
[root@mimo222 ~]# scp *.csr xx.xx.xx.xx:/etc/kubernetes/ssl/

安裝Docker

所有kubernetes節(jié)點(diǎn)都需要安裝docker,并且版本最好一致。

開始安裝

# 刪除老版本Docker及依賴,如果機(jī)器上裝過其他版本的docker,可通過該命令進(jìn)行老版本docker清理
[root@mimo222 ~]# yum remove docker docker-common container-selinux docker-selinux docker-engine

# 安裝 yum-config-manager
[root@mimo222 ~]# yum -y install yum-utils

# 導(dǎo)入yum源
[root@mimo222 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 更新repo
[root@mimo222 ~]# yum makecache

# 查看yum版本
[root@mimo222 ~]# yum list docker-ce.x86_64 --showduplicates |sort -r

# 安裝指定版本docker-ce 17.03被docker-ce-selinux依賴,不能直接yum安裝docker-ce-selinux
# 如果此處通過wget無法下載,可到網(wǎng)上查一下這個(gè)rpm包,下載下來然后拷貝到服務(wù)器???。

[root@mimo222 ~]# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm

[root@mimo222 ~]# rpm -ivh docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm

# 安裝docker
[root@mimo222 ~]# yum -y install docker-ce-17.03.2.ce

查看docker版本

[root@mimo222 ~]# docker version

Client:
 Version:      17.03.2-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.2-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64
 Experimental: false

更改docker配置

更改/usr/lib/systemd/system/docker.service啟動文件

[root@mimo222 ~]# vi /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
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS $DOCKER_DNS_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

對比初始安裝docker后的docker.service文件內(nèi)容,修改docker.service文件。

修改其他配置

[root@mimo222 ~]# mkdir -p /usr/lib/systemd/system/docker.service.d/

docker-options.conf該文件中保存docker啟動的一些參數(shù)

[root@mimo222 ~]# vi /usr/lib/systemd/system/docker.service.d/docker-options.conf

# 文件中添加信息如下:(注意 Environment配置信息必須在同一行,如果出現(xiàn)換行會無法加載)

[Service]
Environment="DOCKER_OPTS=--insecure-registry=10.254.0.0/16 --graph=/opt/docker --disable-legacy-registry"
[root@mimo222 ~]# vi /usr/lib/systemd/system/docker.service.d/docker-dns.conf

# 添加如下 : 

[Service]
Environment="DOCKER_DNS_OPTIONS=\
    --dns 10.254.0.2 --dns 114.114.114.114  \
    --dns-search default.svc.cluster.local --dns-search svc.cluster.local  \
    --dns-opt ndots:2 --dns-opt timeout:2 --dns-opt attempts:2"

flannel.conf:該文件保存了讀取flannel網(wǎng)絡(luò)分段信息

# 1. 該配置文件用于和flannel網(wǎng)絡(luò)交互,若使用的網(wǎng)絡(luò)配置不是flannel,則無需該配置文件
# 2. 該配置文件需在flannel安裝配置之后才能生效

vi /usr/lib/systemd/system/docker.service.d/flannel.conf

添加如下信息:

[Service]
EnvironmentFile=-/run/flannel/docker

啟動、重啟、查看docker

# 重新讀取配置
[root@mimo222 ~]# systemctl daemon-reload

# 啟動docker
[root@mimo222 ~]# systemctl start docker

# 設(shè)置為開機(jī)啟動
[root@mimo222 ~]# systemctl enable docker

# 查看docker運(yùn)行狀態(tài)
[root@mimo222 ~]# systemctl status docker

# 重啟docker
[root@mimo222 ~]# systemctl restart docker

# 停止運(yùn)行docker
[root@mimo222 ~]# systemctl stop docker

etcd安裝配置

etcdkubernetes集群最重要的組件, etcd掛了,集群就掛了。

安裝etcd

這里我是在別的地方下載了etcd-3.2.9-3.el7.x86_64.rpm,然后拷貝到服務(wù)器上進(jìn)行安裝。

rpm -ivh etcd-3.2.9-3.el7.x86_64.rpm

創(chuàng)建etcd證書

[root@mimo222 ~]# cd /opt/ssl/

[root@mimo222 ~]# vi etcd-csr.json

# 添加如下內(nèi)容:

{
  "CN": "etcd",
  "hosts": [
    "127.0.0.1",
    "10.0.11.222"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "TianJin",
      "L": "TianJin",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

其中,hosts中填寫的是etcd節(jié)點(diǎn)的地址,這里只安裝了單節(jié)點(diǎn)etcd,因此只填寫了etcd本地地址127.0.0.1以及10.0.11.222。如果安裝的是etcd集群,則需要在hosts中添加別的etcd節(jié)點(diǎn)的ip地址。

# 生成 etcd 密鑰
 /opt/local/cfssl/cfssl gencert -ca=/opt/ssl/ca.pem \
  -ca-key=/opt/ssl/ca-key.pem \   -config=/opt/ssl/config.json \   -profile=kubernetes etcd-csr.json | /opt/local/cfssl/cfssljson -bare etcd

/opt/local/cfssl/cfssl:使用cfssl進(jìn)行證書生成

# 查看生成信息

[root@mimo222 ~]# ll etcd*

-rw-r--r-- 1 root root 1050 Dec 14 18:31 etcd.csr
-rw-r--r-- 1 root root  257 Dec 14 18:31 etcd-csr.json
-rw------- 1 root root 1679 Dec 14 18:31 etcd-key.pem
-rw-r--r-- 1 root root 1424 Dec 14 18:31 etcd.pem

# 拷貝
[root@mimo222 ~]# cp etcd*.pem /etc/kubernetes/ssl/

# 如果 etcd 非 root 用戶,讀取證書會提示沒權(quán)限
[root@mimo222 ~]# chmod 644 /etc/kubernetes/ssl/etcd-key.pem

修改etcd配置

修改 etcd 配置文件/etc/etcd/etcd.conf

# 備份原來的etcd.conf配置文件
mv /etc/etcd/etcd.conf /etc/etcd/etcd.conf-bak

# 重新寫一份配置文件
vi /etc/etcd/etcd.conf

# [member]
ETCD_NAME=etcd1  # etcd節(jié)點(diǎn)名稱
ETCD_DATA_DIR="/var/lib/etcd/etcd1.etcd"
ETCD_WAL_DIR="/var/lib/etcd/wal"
ETCD_SNAPSHOT_COUNT="100"
ETCD_HEARTBEAT_INTERVAL="100"
ETCD_ELECTION_TIMEOUT="1000"
ETCD_LISTEN_PEER_URLS="https://[Node IP]:2380" 
ETCD_LISTEN_CLIENT_URLS="https://[Node IP]:2379,http://127.0.0.1:2379"
ETCD_MAX_SNAPSHOTS="5"
ETCD_MAX_WALS="5"
#ETCD_CORS=""

# [cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://[Node IP]:2380"
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
ETCD_INITIAL_CLUSTER="etcd1=https://[Node IP]:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="k8s-etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="https://[Node IP]:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_SRV=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_STRICT_RECONFIG_CHECK="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"

# [proxy]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REFRESH_INTERVAL="30000"
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"

# [security]
ETCD_CERT_FILE="/etc/kubernetes/ssl/etcd.pem"
ETCD_KEY_FILE="/etc/kubernetes/ssl/etcd-key.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_TRUSTED_CA_FILE="/etc/kubernetes/ssl/ca.pem"
ETCD_AUTO_TLS="true"
ETCD_PEER_CERT_FILE="/etc/kubernetes/ssl/etcd.pem"
ETCD_PEER_KEY_FILE="/etc/kubernetes/ssl/etcd-key.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"
ETCD_PEER_TRUSTED_CA_FILE="/etc/kubernetes/ssl/ca.pem"
ETCD_PEER_AUTO_TLS="true"

# [logging]
#ETCD_DEBUG="false"
# examples for -log-package-levels etcdserver=WARNING,security=DEBUG
#ETCD_LOG_PACKAGE_LEVELS=""

注意:
1、將上面的配置文件中的[Node IP]都修改為本機(jī)IP,這里我安裝在10.0.11.222,因此都修改成了10.0.11.222。

2、[security]下的配置項(xiàng)指定了證書的位置,因此要注意證書的位置是否正確。

3、如果安裝的是etcd集群,配置文件信息基本一致,只要修改[Node IP]為etcd節(jié)點(diǎn)的主機(jī)IP即可,同時(shí)修改ETCD_INITIAL_CLUSTER項(xiàng),該項(xiàng)需要添加所有etcd節(jié)點(diǎn),例如:
ETCD_INITIAL_CLUSTER="etcd1=https://172.16.1.64:2380,etcd2=https://172.16.1.65:2380,etcd3=https://172.16.1.66:2380"。

啟動 etcd

[root@mimo222 ~]# systemctl enable etcd

[root@mimo222 ~]# systemctl start etcd

[root@mimo222 ~]# systemctl status etcd

# 如果報(bào)錯(cuò) 請使用
journalctl -f -t etcd  和 journalctl -u etcd 來定位問題
[root@mimo222 ~]# journalctl -f -t etcd

驗(yàn)證 etcd 狀態(tài)

查看 etcd 狀態(tài)

若為etcd集群,則--endpoints需要填寫所有etcd節(jié)點(diǎn)IP:PORT

etcdctl --endpoints=https://10.0.11.222:2379\
        --cert-file=/etc/kubernetes/ssl/etcd.pem \         --ca-file=/etc/kubernetes/ssl/ca.pem \         --key-file=/etc/kubernetes/ssl/etcd-key.pem \         cluster-health

member 2012db49e3efb509 is healthy: got healthy result from https://10.0.11.222:2379
cluster is healthy

查看 etcd 集群成員

etcdctl --endpoints=https://10.0.11.222:2379\
        --cert-file=/etc/kubernetes/ssl/etcd.pem \         --ca-file=/etc/kubernetes/ssl/ca.pem \         --key-file=/etc/kubernetes/ssl/etcd-key.pem \         member list

2012db49e3efb509: name=etcd1 peerURLs=http://10.0.11.222:2380 clientURLs=https://10.0.11.222:2379 isLeader=true

Kubernetes Master節(jié)點(diǎn)安裝配置

Master需要部署 kube-apiserver , kube-scheduler , kube-controller-manager 這三個(gè)組件。 kube-scheduler 作用是調(diào)度pods分配到那個(gè)node里,簡單來說就是資源調(diào)度。 kube-controller-manager 作用是 對 deployment controller , replication controller, endpoints controller, namespace controller and serviceaccounts controller等等的循環(huán)控制,與kube-apiserver交互。

安裝組件

[root@mimo222 ~]# mkdir /tmp/kubernetes

[root@mimo222 ~]# cd /tmp/kubernetes

# 這個(gè)包比較大,幾百兆,我通過wget沒有下下來... 直接在網(wǎng)頁上輸入這個(gè)網(wǎng)址,然后一點(diǎn)一點(diǎn)下載下來了..
# 大家可以用別的方法下載,然后拷貝到服務(wù)器上即可。

[root@mimo222 ~]# wget https://dl.k8s.io/v1.8.3/kubernetes-server-linux-amd64.tar.gz

[root@mimo222 ~]# tar -xzvf kubernetes-server-linux-amd64.tar.gz

[root@mimo222 ~]# cd kubernetes

# Master節(jié)點(diǎn)不需要kubelet、kube-proxy,因此這里沒有拷貝這倆,如果要將master節(jié)點(diǎn)也裝成node節(jié)點(diǎn),
# 則kubelet、kube-proxy這倆就需要拷貝出來了。

[root@mimo222 ~]# cp -r server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler,kubectl} /usr/local/bin/

創(chuàng)建admin證書

kubectlkube-apiserver 的安全端口通信,需要為安全通信提供 TLS 證書和秘鑰。

[root@mimo222 ~]# cd /opt/ssl/

[root@mimo222 ~]# vi admin-csr.json

# 添加以下信息:

{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "TianJin",
      "L": "TianJin",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}

生成admin 證書和私鑰

[root@mimo222 ~]# cd /opt/ssl/
 /opt/local/cfssl/cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
  -ca-key=/etc/kubernetes/ssl/ca-key.pem \   -config=/opt/ssl/config.json \   -profile=kubernetes admin-csr.json | /opt/local/cfssl/cfssljson -bare admin

查看生成

[root@mimo222 ssl]# ll admin*

-rw-r--r-- 1 root root 1013 Dec 14 19:22 admin.csr
-rw-r--r-- 1 root root  231 Dec 14 19:22 admin-csr.json
-rw------- 1 root root 1679 Dec 14 19:22 admin-key.pem
-rw-r--r-- 1 root root 1407 Dec 14 19:22 admin.pem

拷貝到指定目錄

cp admin*.pem /etc/kubernetes/ssl/

配置 kubectl kubeconfig 文件

生成證書相關(guān)的配置文件存儲與 /root/.kube 目錄中

# 配置 kubernetes 集群

kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \   --embed-certs=true \   --server=https://127.0.0.1:6443 

# 配置 客戶端認(rèn)證

kubectl config set-credentials admin \
  --client-certificate=/etc/kubernetes/ssl/admin.pem \   --embed-certs=true \   --client-key=/etc/kubernetes/ssl/admin-key.pem 

kubectl config set-context kubernetes \
  --cluster=kubernetes \   --user=admin 

kubectl config use-context kubernetes

創(chuàng)建 kubernetes 證書

[root@mimo222 ~]# cd /opt/ssl

[root@mimo222 ~]# vi kubernetes-csr.json

{
  "CN": "kubernetes",
  "hosts": [
    "127.0.0.1",
    "10.0.11.222",
    "10.254.0.1",
    "kubernetes",
    "kubernetes.default",
    "kubernetes.default.svc",
    "kubernetes.default.svc.cluster",
    "kubernetes.default.svc.cluster.local"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShenZhen",
      "L": "ShenZhen",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

這里 hosts 字段中三個(gè) IP 分別為 127.0.0.1 本機(jī)、172.16.1.64MasterIP(多個(gè)Master節(jié)點(diǎn)需要將所有master節(jié)點(diǎn)IP都寫在這)、 10.254.0.1kubernetes SVCIP, 一般是部署網(wǎng)絡(luò)的第一個(gè)IP , 如: 10.254.0.1, 在啟動完成后,我們使用 kubectl get svc, 就可以查看到。

生成 kubernetes 證書和私鑰

kubelet 首次啟動時(shí)向kube-apiserver 發(fā)送 TLS Bootstrapping 請求,kube-apiserver 驗(yàn)證 kubelet 請求中的 token 是否與它配置的 token 一致,如果一致則自動為 kubelet生成證書和秘鑰。

# 生成 token(注意此處的token在生成node節(jié)點(diǎn)kubelet需要的證書時(shí)也會用到,要注意不要寫錯(cuò)或重新生成別的)

[root@mimo222 ~]# head -c 16 /dev/urandom | od -An -t x | tr -d ' '
3140a1541451afcc87ca7b715f124ce3

# 創(chuàng)建 token.csv 文件

[root@mimo222 ~]# cd /opt/ssl

[root@mimo222 ~]# vi token.csv

# 填寫以下信息:
3140a1541451afcc87ca7b715f124ce3,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

# 拷貝
cp token.csv /etc/kubernetes/
# 生成高級審核配置文件

[root@mimo222 ~]# cd /etc/kubernetes

cat >> audit-policy.yaml <

創(chuàng)建 kube-apiserver.service 文件

  • 自定義 系統(tǒng) service 文件一般存于 /etc/systemd/system/
  • 配置為 各自的本地IP
[root@mimo222 ~]# vi /etc/systemd/system/kube-apiserver.service


[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
User=root
ExecStart=/usr/local/bin/kube-apiserver \
  --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,NodeRestriction \   --advertise-address=10.0.11.222 \   --allow-privileged=true \   --apiserver-count=3 \   --audit-policy-file=/etc/kubernetes/audit-policy.yaml \   --audit-log-maxage=30 \   --audit-log-maxbackup=3 \   --audit-log-maxsize=100 \   --audit-log-path=/var/log/kubernetes/audit.log \   --authorization-mode=Node,RBAC \   --anonymous-auth=false \ # 不接受匿名訪問,若為true,則表示接受,此處設(shè)置為false,便于dashboard訪問   --bind-address=0.0.0.0 \   --secure-port=6443 \   --client-ca-file=/etc/kubernetes/ssl/ca.pem \   --enable-swagger-ui=true \   --etcd-cafile=/etc/kubernetes/ssl/ca.pem \   --etcd-certfile=/etc/kubernetes/ssl/etcd.pem \   --etcd-keyfile=/etc/kubernetes/ssl/etcd-key.pem \   --etcd-servers=https://10.0.11.222:2379 \   --event-ttl=1h \   --kubelet-https=true \   --insecure-bind-address=127.0.0.1 \   --insecure-port=8080 \   --service-account-key-file=/etc/kubernetes/ssl/ca-key.pem \   --service-cluster-ip-range=10.254.0.0/16 \   --service-node-port-range=30000-32000 \   --tls-cert-file=/etc/kubernetes/ssl/kubernetes.pem \   --tls-private-key-file=/etc/kubernetes/ssl/kubernetes-key.pem \   --enable-bootstrap-token-auth \   --token-auth-file=/etc/kubernetes/token.csv \   --v=2 Restart=on-failure
RestartSec=5
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
  1. --advertise-address:master節(jié)點(diǎn)本機(jī)IP

  2. --etcd-servers:etcd URL:etcd集群需要寫上所有etcd節(jié)點(diǎn) URL

  3. --service-node-port-range=30000-32000:這個(gè)地方是 映射外部端口時(shí) 的端口范圍,隨機(jī)映射也在這個(gè)范圍內(nèi)映射,指定映射端口必須也在這個(gè)范圍內(nèi)。

  4. 注意驗(yàn)證證書等路徑是否正確。

啟動 kube-apiserver

[root@mimo222 ~]# systemctl daemon-reload
[root@mimo222 ~]# systemctl enable kube-apiserver
[root@mimo222 ~]# systemctl start kube-apiserver
[root@mimo222 ~]# systemctl status kube-apiserver

配置 kube-controller-manager

創(chuàng)建 kube-controller-manager.service文件

[root@mimo222 ~]# vi /etc/systemd/system/kube-controller-manager.service


[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes

[Service]
ExecStart=/usr/local/bin/kube-controller-manager \
  --address=0.0.0.0 \   --master=http://127.0.0.1:8080 \   --allocate-node-cidrs=true \   --service-cluster-ip-range=10.254.0.0/16 \   --cluster-cidr=10.233.0.0/16 \   --cluster-name=kubernetes \   --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem \   --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem \   --service-account-private-key-file=/etc/kubernetes/ssl/ca-key.pem \   --root-ca-file=/etc/kubernetes/ssl/ca.pem \   --leader-elect=true \   --v=2 Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

啟動 kube-controller-manager

[root@mimo222 ~]# systemctl daemon-reload
[root@mimo222 ~]# systemctl enable kube-controller-manager
[root@mimo222 ~]# systemctl start kube-controller-manager
[root@mimo222 ~]# systemctl status kube-controller-manager

配置 kube-scheduler

創(chuàng)建 kube-cheduler.service 文件

[root@mimo222 ~]# vi /etc/systemd/system/kube-scheduler.service


[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes

[Service]
ExecStart=/usr/local/bin/kube-scheduler \
  --address=0.0.0.0 \   --master=http://127.0.0.1:8080 \   --leader-elect=true \   --v=2 Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

啟動 kube-scheduler

[root@mimo222 ~]# systemctl daemon-reload
[root@mimo222 ~]# systemctl enable kube-scheduler
[root@mimo222 ~]# systemctl start kube-scheduler
[root@mimo222 ~]# systemctl status kube-scheduler

驗(yàn)證 Master 節(jié)點(diǎn)

[root@mimo222 ssl]# kubectl get componentstatuses
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"} 


# 由于還沒有加入node節(jié)點(diǎn),所有查詢node時(shí)為空。

[root@mimo222 ssl]# kubectl get nodes
NAME          STATUS    ROLES     AGE       VERSION

flannel安裝配置

kubernetes要求集群內(nèi)各節(jié)點(diǎn)能通過Pod網(wǎng)段互聯(lián)互通,本節(jié)介紹使用Flannel在所有節(jié)點(diǎn) (Master、Node) 上創(chuàng)建互聯(lián)互通的 Pod 網(wǎng)段的步驟。

創(chuàng)建flannel證書

[root@mimo222 ~]# cd /opt/ssl/

[root@mimo222 ~]# vi flanneld-csr.json

# 添加如下內(nèi)容:

{
  "CN": "flanneld",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShenZhen",
      "L": "ShenZhen",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

注意:hosts 字段為空。

生成 flanneld 證書和私鑰

[root@mimo222 ~]# cd /opt/ssl

[root@mimo222 ~]# /opt/local/cfssl/cfssl gencert -ca=/opt/ssl/ca.pem \
    -ca-key=/opt/ssl/ca-key.pem \ -config=/opt/ssl/config.json \
    -profile=kubernetes flanneld-csr.json | /opt/local/cfssl/cfssljson -bare flanneld
# 查看生成信息

[root@mimo222 ~]# ll flannel*

-rw-r--r-- 1 root root 1001 Dec 15 13:59 flanneld.csr
-rw-r--r-- 1 root root  223 Dec 15 13:56 flanneld-csr.json
-rw------- 1 root root 1679 Dec 15 13:59 flanneld-key.pem
-rw-r--r-- 1 root root 1395 Dec 15 13:59 flanneld.pem

# 拷貝
[root@mimo222 ~]# cp flanneld*.pem /etc/kubernetes/ssl/

向etcd寫入集群Pod網(wǎng)段信息

注意:本步驟只需在第一次部署 Flannel 網(wǎng)絡(luò)時(shí)執(zhí)行,后續(xù)在其它節(jié)點(diǎn)上部署 Flannel 時(shí)無需再寫入該信息!

etcdctl --endpoints=https://10.0.11.222:2379 \
--ca-file=/opt/ssl/ca.pem \ --cert-file=/etc/kubernetes/ssl/flanneld.pem \ --key-file=/etc/kubernetes/ssl/flanneld-key.pem \ set /kubernetes/network/config '{"Network":"10.233.0.0/16"}'

寫入的 Pod 網(wǎng)段({"Network":"10.233.0.0/16"}) 必須與 kube-controller-manager--cluster-cidr 選項(xiàng)值一致;

安裝和配置flanneld

下載 flanneld

[root@mimo222 ~]# mkdir /tnp/flannel

[root@mimo222 ~]# cd /tmp/flannel

[root@mimo222 ~]# wget https://github.com/coreos/flannel/releases/download/v0.7.1/flannel-v0.7.1-linux-amd64.tar.gz

[root@mimo222 ~]# tar -xzvf flannel-v0.7.1-linux-amd64.tar.gz

[root@mimo222 ~]# cp {flanneld,mk-docker-opts.sh} /usr/local/bin

創(chuàng)建啟動文件flanneld.service

[root@mimo222 ~]# vi /etc/systemd/system/flanneld.service

# 添加以下信息:

[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service

[Service]
Type=notify
ExecStart=/usr/local/bin/flanneld \\
  -etcd-cafile=/etc/kubernetes/ssl/ca.pem \\   -etcd-certfile=/etc/flanneld/ssl/flanneld.pem \\   -etcd-keyfile=/etc/flanneld/ssl/flanneld-key.pem \\   -etcd-endpoints=https://10.0.11.222:2379 \\   -etcd-prefix=/kubernetes/network ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=on-failure

[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
  1. -etcd-endpoints :填寫etcd配置的URL,注意使用https

  2. -etcd-prefix:上面第一步設(shè)置的Pod網(wǎng)段key前綴。我設(shè)置的key/kubernetes/network/config,因此前綴為/kubernetes/network

  3. 注意CA驗(yàn)證證書的路徑是否正確。

啟動 flanneld

[root@mimo222 ~]# systemctl daemon-reload 

[root@mimo222 ~]# systemctl enable flanneld

[root@mimo222 ~]# systemctl start flanneld

[root@mimo222 ~]# systemctl status flanneld

etcd中flannel網(wǎng)段信息查詢

對于以下命令,--endpoints參數(shù)后跟的是etcd集群IP:PORT(多個(gè)etcd節(jié)點(diǎn)需填多個(gè)IP:PORT),/kubernetes/network是我這里設(shè)置的FLANNEL_ETCD_PREFIX,因此大家可根據(jù)自己設(shè)置的flannel etcd 前綴來填寫。--ca-file、--cert-file、--key-file是指相應(yīng)flannel證書路徑,若沒有采用CA驗(yàn)證,則不需要。

下面的命令僅是我這里用的一些命令例子,其中參數(shù)需要根據(jù)自己需要修改一下。

查看ETCD中flannel集群 Pod 網(wǎng)段

etcdctl --endpoints=https://10.0.11.222:2379 \
--ca-file=/opt/ssl/ca.pem \ --cert-file=/etc/kubernetes/ssl/flanneld.pem \ --key-file=/etc/kubernetes/ssl/flanneld-key.pem \ get /kubernetes/network/config

{"Network":"10.233.0.0/16"}

查看已分配的 Pod 子網(wǎng)段列表

etcdctl --endpoints=https://10.0.11.222:2379 \
--ca-file=/opt/ssl/ca.pem \ --cert-file=/etc/kubernetes/ssl/flanneld.pem \ --key-file=/etc/kubernetes/ssl/flanneld-key.pem \ ls /kubernetes/network/subnets
 /kubernetes/network/subnets/10.233.50.0-24
/kubernetes/network/subnets/10.233.86.0-24

查看某一 Pod 網(wǎng)段對應(yīng)的 flanneld 進(jìn)程監(jiān)聽的 IP 和網(wǎng)絡(luò)參數(shù)

etcdctl --endpoints=https://10.0.11.222:2379 \
--ca-file=/opt/ssl/ca.pem \ --cert-file=/etc/kubernetes/ssl/flanneld.pem \ --key-file=/etc/kubernetes/ssl/flanneld-key.pem \ get /kubernetes/network/subnets/10.233.50.0-24

{"PublicIP":"10.0.11.221"}

確保各節(jié)點(diǎn)間 Pod 網(wǎng)段能互聯(lián)互通

在各節(jié)點(diǎn)上部署完 Flannel 后,根據(jù)上面命令查看已分配的 Pod 子網(wǎng)段列表(此處是我分配的網(wǎng)段列表):

/kubernetes/network/subnets/10.233.50.0-24
/kubernetes/network/subnets/10.233.86.0-24

在各節(jié)點(diǎn)上分配 ping 這兩個(gè)網(wǎng)段的網(wǎng)關(guān)地址,確保能通:

ping 10.233.50.1

ping 10.233.86.1

Kubernetes Node節(jié)點(diǎn)安裝配置

kubernetes node節(jié)點(diǎn)需要安裝kubelet、kube-proxyflannel。下面的配置步驟,指明在master節(jié)點(diǎn)執(zhí)行的需要在master節(jié)點(diǎn)執(zhí)行,沒有指明的在node節(jié)點(diǎn)執(zhí)行。

配置 kubelet(Master節(jié)點(diǎn)執(zhí)行)

kubelet 啟動時(shí)向 kube-apiserver 發(fā)送 TLS bootstrapping 請求,需要先將 bootstrap token文件中的 kubelet-bootstrap 用戶賦予 system:node-bootstrapper 角色,然后 kubelet才有權(quán)限創(chuàng)建認(rèn)證請求(certificatesigningrequests)。

# 先創(chuàng)建認(rèn)證請求
# user 為 master 中 token.csv 文件里配置的用戶
# 只需創(chuàng)建一次就可以

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

創(chuàng)建 kubelet kubeconfig 文件(Master節(jié)點(diǎn)執(zhí)行)

# 配置集群(server要寫master ip地址,不要使用127.0.0.1或localhost,否則node節(jié)點(diǎn)無法識別)

kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \   --embed-certs=true \   --server=https://10.0.11.222:6443 \   --kubeconfig=bootstrap.kubeconfig 
# 配置客戶端認(rèn)證(此處的token使用token.csv中的token)

kubectl config set-credentials kubelet-bootstrap \
  --token=3140a1541451afcc87ca7b715f124ce3 \   --kubeconfig=bootstrap.kubeconfig 

# 配置關(guān)聯(lián)

kubectl config set-context default \
  --cluster=kubernetes \   --user=kubelet-bootstrap \   --kubeconfig=bootstrap.kubeconfig 

# 配置默認(rèn)關(guān)聯(lián)
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig

# 拷貝生成的 bootstrap.kubeconfig 文件

mv bootstrap.kubeconfig /etc/kubernetes/

配置 kube-proxy(Master節(jié)點(diǎn)執(zhí)行)

創(chuàng)建 kube-proxy 證書(Master節(jié)點(diǎn)執(zhí)行)

[root@mimo222 ~]# cd /opt/ssl

[root@mimo222 ~]# vi kube-proxy-csr.json

{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "TianJin",
      "L": "TianJin",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

生成 kube-proxy 證書和私鑰(Master節(jié)點(diǎn)執(zhí)行)

/opt/local/cfssl/cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
  -ca-key=/etc/kubernetes/ssl/ca-key.pem \   -config=/opt/ssl/config.json \   -profile=kubernetes kube-proxy-csr.json | /opt/local/cfssl/cfssljson -bare kube-proxy 
# 查看生成
[root@mimo222 ssl]# ll kube-proxy*
-rw-r--r-- 1 root root 1013 Dec 14 20:09 kube-proxy.csr -rw-r--r-- 1 root root 232 Dec 14 20:09 kube-proxy-csr.json -rw------- 1 root root 1679 Dec 14 20:09 kube-proxy-key.pem -rw-r--r-- 1 root root 1407 Dec 14 20:09 kube-proxy.pem 
# 拷貝到目錄
cp kube-proxy*.pem /etc/kubernetes/ssl/

創(chuàng)建 kube-proxy kubeconfig 文件(Master節(jié)點(diǎn)執(zhí)行)

# 配置集群(server要寫master ip地址,不要使用127.0.0.1或localhost,否則node節(jié)點(diǎn)無法識別)

kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \   --embed-certs=true \   --server=https://10.0.11.222:6443 \   --kubeconfig=kube-proxy.kubeconfig 

# 配置客戶端認(rèn)證(注意證書路徑)

kubectl config set-credentials kube-proxy \
  --client-certificate=/etc/kubernetes/ssl/kube-proxy.pem \   --client-key=/etc/kubernetes/ssl/kube-proxy-key.pem \   --embed-certs=true \   --kubeconfig=kube-proxy.kubeconfig 

# 配置關(guān)聯(lián)

kubectl config set-context default \
  --cluster=kubernetes \   --user=kube-proxy \   --kubeconfig=kube-proxy.kubeconfig 


# 配置默認(rèn)關(guān)聯(lián)
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig

# 拷貝到目錄
mv kube-proxy.kubeconfig /etc/kubernetes/

從master節(jié)點(diǎn)拷貝證書

所有需要的證書生成最好都在master節(jié)點(diǎn)進(jìn)行生成,然后統(tǒng)一管理,node節(jié)點(diǎn)需要哪些,直接從master拷貝即可。

[root@mimo222 ~]# mkdir -p /etc/kubernetes/ssl/

[root@mimo222 ~]# cd /etc/kubernetes/

# kubelet kubeconfig 文件
[root@mimo222 ~]# scp 10.0.11.222:/etc/kubernetes/bootstrap.kubeconfig ./

# kube-proxy kubeconfig 文件
[root@mimo222 ~]# scp 10.0.11.222:/etc/kubernetes/kube-proxy.kubeconfig ./

[root@mimo222 ~]# cd /etc/kubernetes/ssl

# kubernetes相關(guān)證書
[root@mimo222 ~]# scp 10.0.11.222:/etc/kubernetes/ssl/ca.pem ./
[root@mimo222 ~]# scp 10.0.11.222:/etc/kubernetes/ssl/kube-proxy.pem ./
[root@mimo222 ~]# scp 10.0.11.222:/etc/kubernetes/ssl/kube-proxy-key.pem ./

# flannel證書
[root@mimo222 ~]# scp 10.0.11.222:/etc/kubernetes/ssl/flanneld-key.pem ./
[root@mimo222 ~]# scp 10.0.11.222:/etc/kubernetes/ssl/flanneld.pem ./

node節(jié)點(diǎn)flannel配置

下載 flanneld

[root@mimo222 ~]# mkdir /tnp/flannel

[root@mimo222 ~]# cd /tmp/flannel

[root@mimo222 ~]# wget https://github.com/coreos/flannel/releases/download/v0.7.1/flannel-v0.7.1-linux-amd64.tar.gz

[root@mimo222 ~]# tar -xzvf flannel-v0.7.1-linux-amd64.tar.gz

[root@mimo222 ~]# cp {flanneld,mk-docker-opts.sh} /usr/local/bin

配置并啟動flanneld

創(chuàng)建啟動文件flanneld.service

[root@mimo222 ~]# vi /etc/systemd/system/flanneld.service

# 添加以下信息:

[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service

[Service]
Type=notify
ExecStart=/usr/local/bin/flanneld \\
  -etcd-cafile=/etc/kubernetes/ssl/ca.pem \\   -etcd-certfile=/etc/flanneld/ssl/flanneld.pem \\   -etcd-keyfile=/etc/flanneld/ssl/flanneld-key.pem \\   -etcd-endpoints=https://10.0.11.222:2379 \\   -etcd-prefix=/kubernetes/network ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=on-failure

[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
  1. -etcd-endpoints :填寫etcd配置的URL,注意使用https

  2. -etcd-prefix:上面第一步設(shè)置的Pod網(wǎng)段key前綴。我設(shè)置的key/kubernetes/network/config,因此前綴為/kubernetes/network。

  3. 注意CA驗(yàn)證證書的路徑是否正確。

啟動 flanneld

[root@mimo222 ~]# systemctl daemon-reload 

[root@mimo222 ~]# systemctl enable flanneld

[root@mimo222 ~]# systemctl start flanneld

[root@mimo222 ~]# systemctl status flanneld

安裝kubelet、kube-proxy

[root@mimo222 ~]# cd /tmp/kubernetes

# master節(jié)點(diǎn)安裝時(shí)使用過這個(gè)文件,拷到node節(jié)點(diǎn)即可
[root@mimo222 ~]# wget https://dl.k8s.io/v1.8.3/kubernetes-server-linux-amd64.tar.gz

[root@mimo222 ~]# tar -xzvf kubernetes-server-linux-amd64.tar.gz

[root@mimo222 ~]# cd kubernetes

[root@mimo222 ~]# cp -r server/bin/{kube-proxy,kubelet} /usr/local/bin/

配置 kubelet.service 文件

[root@mimo222 ~]# mkdir /var/lib/kubelet

[root@mimo222 ~]# vi /etc/systemd/system/kubelet.service

[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/usr/local/bin/kubelet \
  --cgroup-driver=cgroupfs \   --address=10.0.11.221 \   --hostname-override=10.0.11.221 \   --pod-infra-container-image=jicki/pause-amd64:3.0 \   --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig \   --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \   --cert-dir=/etc/kubernetes/ssl \   --cluster_dns=10.254.0.2 \   --cluster_domain=cluster.local. \   --hairpin-mode promiscuous-bridge \   --allow-privileged=true \   --fail-swap-on=false \   --serialize-image-pulls=false \   --logtostderr=true \   --max-pods=512 \   --v=2 
[Install]
WantedBy=multi-user.target
  1. --pod-infra-container-image:該項(xiàng)配置的是pod啟動時(shí)需要一塊啟動的pod-infrastructure鏡像,真實(shí)使用時(shí)最好將該文件下載到本地私有庫,然后將該項(xiàng)配置成私有庫的pod-infrastructure鏡像下載地址。

  2. --kubeconfigkubelet啟動成功之后自動生成的kubelet.kubeconfig文件保存路徑。

啟動 kubelet

[root@mimo222 ~]# systemctl daemon-reload
[root@mimo222 ~]# systemctl enable kubelet
[root@mimo222 ~]# systemctl start kubelet
[root@mimo222 ~]# systemctl status kubelet


# 如果報(bào)錯(cuò) 請使用
journalctl -f -t kubelet  和 journalctl -u kubelet 來定位問題

配置 TLS 認(rèn)證(Master節(jié)點(diǎn)執(zhí)行)

# 查看 csr 的名稱

[root@mimo222 ~]# kubectl get csr

NAME                                                   AGE       REQUESTOR           CONDITION
node-csr-A9WKNWyqyq89XOwg-uqCu2C4fBQEhOhzmlQJ6f8VPWE   22h       kubelet-bootstrap   Approved,Issued
node-csr-J1W94p6S2w0fjTkvpdfG0J-lRY-dmkVFH01OG3R6T4Y   3h        kubelet-bootstrap   Approved,Issued
node-csr-aVIfz5k6GX5jy31z43ZkhxzzLfkFtMUoAkJTi1Okcx8   3h        kubelet-bootstrap   Pending

# 若CONDITION顯示為Pending,可增加認(rèn)證
# 下面的語句是將所有Pending狀態(tài)的csr設(shè)置已認(rèn)證
kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve

驗(yàn)證 nodes(Master節(jié)點(diǎn)執(zhí)行)

kubectl get nodes

NAME          STATUS    ROLES     AGE       VERSION
10.0.11.221   Ready         3h        v1.8.3

node節(jié)點(diǎn)驗(yàn)證

kubelet啟動成功之后,會請求apiserver,通過驗(yàn)證,node節(jié)點(diǎn)本地機(jī)器會自動生成配置文件與密鑰,查看/etc/kubernetes

[root@mimo221 kubernetes]# ll

-rw-------. 1 root root 2195 Dec 15 10:27 bootstrap.kubeconfig
-rw-------. 1 root root 2286 Dec 15 15:43 kubelet.kubeconfig
-rw-------. 1 root root 6305 Dec 15 10:28 kube-proxy.kubeconfig
drwxr-xr-x. 2 root root  202 Dec 15 15:43 ssl

[root@mimo221 kubernetes]# ll ssl |grep kubelet

-rw-r--r--. 1 root root 1046 Dec 15 15:43 kubelet-client.crt
-rw-------. 1 root root  227 Dec 15 15:38 kubelet-client.key
-rw-r--r--. 1 root root 1111 Dec 15 15:38 kubelet.crt
-rw-------. 1 root root 1675 Dec 15 15:38 kubelet.key

配置kube-proxy.service 文件

[root@mimo221 kubernetes]# mkdir -p /var/lib/kube-proxy

[root@mimo221 kubernetes]# vi /etc/systemd/system/kube-proxy.service

[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/usr/local/bin/kube-proxy \
  --bind-address=10.0.11.222 \   --hostname-override=k8s-master-64 \   --cluster-cidr=10.254.0.0/16 \   --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \   --logtostderr=true \   --v=2 Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

啟動 kube-proxy

[root@mimo221 kubernetes]# systemctl daemon-reload
[root@mimo221 kubernetes]# systemctl enable kube-proxy
[root@mimo221 kubernetes]# systemctl start kube-proxy
[root@mimo221 kubernetes]# systemctl status kube-proxy

# 如果報(bào)錯(cuò) 請使用
journalctl -f -t kube-proxy  和 journalctl -u kube-proxy 來定位問題

到此如果都沒有報(bào)錯(cuò)的話,說明kubernetes1.8.3集群安裝成功了。


本文名稱:CentOS7.3下DockerKubernetes1.8.3集群環(huán)境搭建
標(biāo)題來源:http://www.dlmjj.cn/article/ccspccc.html