1. 程式人生 > 資料庫 >HELLO---------kubernetes 叢集部署之ETCD資料庫部署

HELLO---------kubernetes 叢集部署之ETCD資料庫部署

一、實驗環境

1、需要三臺伺服器

主機名ip搭建的服務資訊
master20.0.0.10kube-apiserver kube-controller-manager kube-scheduler etcd
node120.0.0.11kubelet kube-proxy docker flannel etcd
node220.0.0.12kubelet kube-proxy docker flannel etcd

上面軟體說明
##各配置的作用:

etcd生產環境中往往放在master上面,,,構建一個叢集最少需要三個節點
kube-apiserver 就是master的主腦部分
kube-controller-manager 控制器的管理器

kube-scheduler 排程器
kubelet 3希望master給它頒發證書
kube-proxy 4提供對外的服務
docker 1容器
flannel 2網路主鍵

2、關閉相關的安全軟體,因為這時實驗環境,所以直接關閉就行,改下主機名

hostnamectl set-hostname node2
su
systemctl stop firewalld
iptables -F
setenforce 0

二、進行實驗

在master上操作

1、建立工作目錄,傳檔案,##從宿主機將所需要的個檔案放在k8s目錄

mkdir k8s 
cd k8s/
ls		 ##從宿主機將所需要的個檔案在這,兩個指令碼,一個目錄
etcd-cert  etcd-cert.sh  etcd.sh
cd etcd-cert/
chmod +x cfssl cfssl-certinfo cfssljson
mv cfssl cfssl-certinfo cfssljson /usr/local/bin/
ls /usr/local/bin/	##檢視下有有沒有下面三個檔案
cfssl  cfssl-certinfo  cfssljson
#cfssl:生成證書工具
#cfssl-certinfo:檢視證書資訊
#cfssljson:通過傳入json檔案生成證書

2、製作CA證書

cd ..
mv etcd-cert.sh etcd-cert/
cd etcd-cert/
1、建立ca證書的配置檔案
vim ca-config.json
{
  "signing": {
    "default": {   ##系統設定值
      "expiry": "87600h"  ##證書的有效期10年
    },
    "profiles": {   ##配置
      "www": {   ##臺頭是www
        "expiry": "87600h",  ##時效 87600h
        "usages": [   ##常見用法(標籤)
          "signing",   ##簽字簽名
          "key encipherment",  ##加密
          "server auth",  ##服務端驗證
          "client auth"   ##客戶端驗證
        ]
      }
    }
  }
}
2、建立ca證書的簽名證書  ##看到csr這個就是簽名的證書
vim ca-csr.json
{
    "CN":"etcd CA",   ##CN中國
    "key": {    ##祕鑰
        "algo":"rsa",   ##祕鑰型別採用rsa非對稱祕鑰
        "size":2048   ##祕鑰長度
    },
    "names": [   ##證書的名稱
        {
            "C":"CN",   ##來自於中國
            "L":"Beijing",  ##地區
            "ST":"Beijing"  ##時區
        }
    ]
}

3、用ca簽名證書生成ca證書,得到ca-key.pem ca.pem
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
ls	##能看到下面六個檔案
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  etcd-cert.sh

上面指令3的部分解釋。
gencert -initca讀取
ca-csr.json初始化用的
cfssljson -bare基本資訊的讀取時-bare
ca-key.pem ca.pem這兩個是所獲得的證書
ca-config.json做server要用到的

3、指定etcd三個節點之間的通訊驗證—需要伺服器簽名證書 server-csr.json

vim server-csr.json    ##通訊驗證證書
{
    "CN": "etcd",
    "hosts": [   ##指明host的檔案地址
    "20.0.0.10",
    "20.0.0.11",
    "20.0.0.12"
    ],
    "key": {
        "algo": "rsa",   ##給你ca相匹配的祕鑰證明
        "size": 2048
    },
    "names": [
        {
          "C": "CN",
          "L": "Beijing",
          "ST": "Beijing"
        }
    ]
}

4、用ca-key.pem、ca.pem、伺服器簽名證書 生成ETCD證書 ----server-key.pem、server.pem

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

ls	##看一下會有下面八個證書#其中server-key.pem  server.pem是最重要的
ca-config.json  ca-csr.json  ca.pem        server.csr       server-key.pem
ca.csr          ca-key.pem   etcd-cert.sh  server-csr.json  server.pem

5、使用證書、etcd指令碼搭建ETCD叢集

5、1、上傳一個生成ETCD配置檔案的指令碼etcd.sh到 /root/k8s 目錄下,指令碼內容如下:
cd ..
tar zxf etcd-v3.3.10-linux-amd64.tar.gz
5、2、解壓後到etcd-v3.3.10-linux-amd64下會生成兩個檔案etcd 和etcdctl是很重要的。
mkdir /opt/etcd/{cfg,bin,ssl} -p ##在opt目錄中建立etcd叢集的工作目錄
ls /opt/etcd/
#bin  cfg  ssl   		##看是否建立成功
cd /root/k8s/etcd-v3.3.10-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/ ##將解壓後的檔案放在/opt/etcd/bin 目錄下
ls /opt/etcd/bin/   		##檢視一下有兩個檔案了etcd  etcdctl
cd /root/k8s/etcd-cert/
cp *.pem /opt/etcd/ssl/  	##將所有的證書放在/opt/etcd/ssl中
ls /opt/etcd/ssl/
#ca-key.pem  ca.pem  server-key.pem  server.pem       ##再去檢視下有沒有
cd /root/k8s/  ##將這個三個壓縮包gz結尾的從宿主機放在它下面
#cfssl.sh   etcd-v3.3.10-linux-amd64            kubernetes-server-linux-amd64.tar.gz
#etcd-cert  etcd-v3.3.10-linux-amd64.tar.gz
#etcd.sh    flannel-v0.10.0-linux-amd64.tar.gz
5、3、執行 etcd.sh 指令碼產生etcd叢集的配置指令碼和服務啟動指令碼,進入卡住狀態等待其他節點加入
#注意:修改成自己的ip地址《vim /root/k8s/etcd.sh這個檔案中能看你配置的群集資訊》
[root@localhost k8s]# bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380

三、使用另外一個會話視窗,會發現etcd程序己經開啟

ps -ef | grep etcd
....  		##能顯示下面的埠資訊
root      16431  0.0  0.0 112664   972 pts/2    S+   22:38   0:00 grep --color=auto etcd
scp -r /opt/etcd/ [email protected]:/opt/
scp -r /opt/etcd/ [email protected]:/opt/
#將所有的配置檔案遠端拷貝到對方的/opt目錄下,記得一定是這個目錄,不然你要重新改配置檔案。
scp /usr/lib/systemd/system/etcd.service [email protected]:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service [email protected]:/usr/lib/systemd/system/
#將啟動指令碼遠端拷貝到node節點的啟動指令碼的位置

四、在node上面進行相關的更改節點node2的node1差不對這裡不多解釋。

#主機名最好改一下
hostnamectl set-hostname node1
su
cd /opt/etcd/cfg       #
[root@node2 cfg]# vim etcd   ##修改叢集的名稱和ip

#[Member]    ##成員
ETCD_NAME="etcd02"    ##修改etcd節點的名稱
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  ##服務執行資料儲存的路徑(設定資料儲存的目錄)
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" ##監聽的同伴通訊的地址,比如http://ip:2380,如果有多個,使用逗號分隔。需要所有節點都能夠訪問,所以不要使用 localhost!(用於監聽其他etcd member的url (統一資源定位器,有叫網頁地址))
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379" ##監聽的客戶端服務地址(對外提供服務的地址(CLIENT客戶機))

#[Clustering]     #使成群(cluster的現在分詞)或聚類
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380" ##對外公告的該節點同伴監聽地址,這個值會告訴叢集中其他節點
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379"  ##對外公告的該節點客戶端監聽地址,這個值會告訴叢集中其他節點。
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380"    ##叢集中所有節點的資訊,格式為
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"  ##叢集的ID,多個叢集的時候,每個叢集的ID必須保持唯一
ETCD_INITIAL_CLUSTER_STATE="new"   ##新建叢集的時候,這個值為 new;假如加入已經存在的叢集,這個值為existing。

這裡是具體的要更改的說明
vim etcd
#[Member]
ETCD_NAME="etcd02" ##改
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" ##改
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379" ##改
##
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380" ##改
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379"  ##改
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

五、兩個node節點都改過後可以去master節點上將叢集開啟,,,原來開的應該會超時而自動退出,所有要重新去開啟,

 bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.

六、然後回到node節點開啟etcd

[root@localhost ~]# systemctl start etcd
[root@localhost ~]# systemctl status etcd
若是running狀態證明是正常的

七、最後到master去執行叢集健康檢查

cd /root/k8s/etcd-cert
 /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" cluster-health
member 4a9f1750486efa02 is healthy: got healthy result from https://20.0.0.10:2379
member c1b99d661e10b568 is healthy: got healthy result from https://20.0.0.11:2379
member f33c8e897853b7c4 is healthy: got healthy result from https://20.0.0.12:2379
cluster is healthy
出現cluster is healthy說明正常

在這裡插入圖片描述