一.集群服務器配置信息展示
| 角色 | IP地址 | 組件 | 規格 |
| k8s-master1 | 192.168.0.201 | kube-apiserver |
1C 2G |
| k8s-master2 | 192.168.0.202 | kube-apiserver |
1C 2G |
| k8s-node1 | 192.168.0.203 | kube-proxy |
1C 2G |
| k8s-node2 | 192.168.0.204 | kube-proxy |
1C 2G |
| Load Balancer(負載均衡) | 192.168.0.205 VIP:192.168.0.200 |
Nginx | 1C 2G |
| Load Balancer(負載均衡) | 192.168.0.206 | Nginx | 1C 2G |
二.搭建一主二從的單集群模式(使用k8s-master1,k8s-node1,k8s-node2三台機器)
(1)系統初始化(可三台機器同時操作)
關閉防火牆:
systemctl stop firewalld
systemctl disable firewalld
關閉selinux:
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
關閉swap:
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
同步服務器時間為win系統時間:
yum install ntpdate -y
ntpdate time.windows.com
添加hosts,所有機器都添加本身和其它的:
vi /etc/hosts
192.168.0.201 k8s-master1
192.168.0.203 k8s-node1
192.168.0.204 k8s-node2

分別修改主機名:
hostnamectl set-hostname k8s-master1
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
(2)集群證書安裝配置(可在任意一台操作,如在k8s-master1上操作)
上傳 TLS.tar.gz 到服務器/usr/local/k8s下
mkdir /usr/local/k8s 解壓證書文件 cd /usr/local/k8s tar -zxvf TLS.tar.gz 執行腳本文件將證書拷貝到/usr/local/bin下 cd /usr/local/k8s/TLS ./cfssl.sh 修改相關配置文件自動生成證書 cd /usr/local/k8s/TLS/etcd vi server-csr.json 將hosts中的IP改為192.168.0.201,192.168.0.203,192.168.0.204
./generate_etcd_cert.sh #腳本生成證書
部署三個Etcd節點,上傳 etcd.tar.gz 到服務器/usr/local/k8s下
解壓etcd壓縮文件
cd /usr/local/k8s
tar -zxvf etcd.tar.gz
etcd文件遷移
mv etcd /opt/
mv etcd.service /usr/lib/systemd/system
vi /opt/etcd/cfg/etcd.conf
修改etcd-2和etcd-3的IP分別改為192.168.0.203,192.168.0.204,其它IP均改為192.168.0.201

etcd證書文件遷移
cd /usr/local/k8s/TLS/etcd
cp {ca,server,server-key}.pem /opt/etcd/ssl #都寫 y
分別拷貝Etcd到另外兩個節點
scp -r /opt/etcd root@192.168.0.203:/opt
scp -r /opt/etcd root@192.168.0.204:/opt
scp /usr/lib/systemd/system/etcd.service root@192.168.0.203:/usr/lib/systemd/system
scp /usr/lib/systemd/system/etcd.service root@192.168.0.204:/usr/lib/systemd/system
分別登陸k8s-node1和k8s-node2兩台服務器修改配置文件
vi /opt/etcd/cfg/etcd.conf
分別將ETCD_NAME改為etcd-2和etcd-3
除集群參數行ETCD_INITIAL_CLUSTER的IP不動外,其它IP均分別改為192.168.0.203和192.168.0.204


重啟etcd使配置文件生效並設置開機自啟動(三台機器均要執行)
systemctl start etcd
systemctl enable etcd
如啟動失敗報錯,可執行 journalctl -xe 查看報錯信息后調整,若無,跳過
查看集群健康狀態
/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://192.168.0.201:2379,https://192.168.0.203:2379,https://192.168.0.204:2379" cluster-health
顯示
則成功
為APIServer生成證書,修改請求文件中hosts字段包含所有etcd節點IP
cd /usr/local/k8s/TLS/k8s
vi server-csr.json

生產證書
./generate_k8s_cert.sh
(3)Master節點部署apiserver,controller-manager和scheduler(在k8s-master1上操作)
上傳 k8s-master.tar.gz 到服務器/usr/local/k8s下
解壓etcd壓縮文件
cd /usr/local/k8s
tar -zxvf k8s-master.tar.gz
修改配置文件中的IP信息
cd /usr/local/k8s/kubernetes/cfg
vi kube-apiserver.conf
復制證書到ssl目錄
cd /usr/local/k8s/TLS/k8s
cp *.pem /usr/local/k8s/kubernetes/ssl/
cp -rf /usr/local/k8s/kubernetes /opt
cd /usr/local/k8s
cp *.service /usr/lib/systemd/system
各組件啟動
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
ps -ef|grep kube 查看組件進程是否啟動
授權啟用TLS
cd /opt/kubernetes/bin
cp kubectl /bin/
給kubelet-bootstrap授權
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
(4)部署Node節點組件(所有node節點可同時操作)
上傳 k8s-node.tar.gz 到服務器/usr/local/k8s下,部署docker
cd /usr/local/k8s
tar -zxvf k8s-node.tar.gz
tar -zxvf docker-18.09.6.tgz
mv docker/* /usr/bin
mkdir /etc/docker
vi daemon.json 中的IP為master的IP
mv daemon.json /etc/docker/
mv docker.service /usr/lib/systemd/system
systemctl start docker
systemctl enable docker
部署kubelet和kube-proxy
cp kubelet.service kube-proxy.service /usr/lib/systemd/system
mv kubernetes /opt
從master中拷貝證書到當前的node節點(僅下兩條命令操作k8s-master1服務器)
cd /usr/local/k8s/TLS/k8s
scp ca.pem kube-proxy*.pem root@192.168.0.203:/opt/kubernetes/ssl/
scp ca.pem kube-proxy*.pem root@192.168.0.204:/opt/kubernetes/ssl/
修改以下兩個配置文件中IP地址
cd /opt/kubernetes/cfg
vi kube-proxy.kubeconfig

vi bootstrap.kubeconfig

各組件啟動
systemctl start kubelet
systemctl start kube-proxy
systemctl enable kubelet
systemctl enable kube-proxy
master給Node頒發證書(僅下三條命令操作k8s-master1服務器)
kubectl get csr
//將上條命令生成的NMAE屬性加到 kubectl certificate approve后面
kubectl certificate approve node-csr-MYUxbmf_nmPQjmH3LkbZRL2uTO-_FCzDQUoUfTy7YjI
kubectl get node
(5)AAAAA
