Kubernetes(K8s) 學習筆記 updating...


官網:

https://kubernetes.io/
https://github.com/kubernetes/kubernetes

 

谷歌Borg,后經過Go語言重寫並捐獻給CNCF基金會開源

Kubernetes    舵手/飛行員     

開源的容器編排框架工具(生態極其豐富)

 

 

Pod/Pod控制器

Pod

 

Pod控制器 

 

 

 

 

 

 

 

Name/Namespace

Name

 

 

Namespace

 

  

Label/Label選擇器

 

Label

 

 

 Label選擇器

 

Service/Ingress 

Service

  

Ingress

 

 

 

 

 

kube-apiserver服務

 

controller-manager 

  

 scheduler

 

kubelet

 

 

 

kube-proxy

 

 

 

 

 

 

PS: k8s 三種網絡  及IP划分推薦

NODE 節點網絡(宿主機網絡)  10.x.x.0/24

POD 容器網絡  172.x.0.0/16

Service 集群網絡   192.168.x.x/16

 

IP規划每個ip號碼要有具體意義,便於排錯  POD和NODE 要近似:

例如:

10 段代表Node網絡

172 段代表Pod網絡

192 段代表 Service網絡

 

10.4.7.x/16     代表Node節點,4號機房下面的測試服務器,x號  

10 = IDC的私有地址

4 = 機房區域(比如代表)

7 = 不同的項目,不同的環境(7測試,8預生產,9生產)

172.4.7.x/24  代表Pod節點,4號機房下面的測試服務器

 

 K8S 邏輯架構圖 參考

 

K8S 集群架構圖

 

 # 5台主機,1個VIP

10.4.7.10  VIP

10.4.7.200  運維主機

 

10.4.7.11  master   

10.4.7.12  standby 

 

10.4.7.21  主控節點、運算節點  核心組件

104.7.22   主控節點、運算節點   核心組件

 

K8S部署方式種:

 

 

Minikube  

# 直接Webshell 體驗

https://kubernetes.io/zh/docs/tutorials/hello-minikube/

 

 

二進制安裝部署

SSL 需要自簽發證書(自簽發證書:默認一年)

 

# 環境簡介

192.168.27.101

192.168.27.102

192.168.27.103

192.168.27.104

192.168.27.105

 

# 初始化設置

安裝和克隆虛擬機(略)

hostnamectl set-hostname <主機名>

調整yum源

yum install epel-release

關閉selinux和firewalld

setenforce 0

systemctl stop firewalld

必備工具安裝

yum install wget net-tools telnet tree nmap sysstat lrzsz dos2unix bind-utils ntpdate -y

ntpdate ntp1.aliyun.com  # 把所有測試機時間同步

 

安裝DNS(bind)在 27.101

sudo yum install bind -y

主配置文件

vi /etc/named.conf

----------------修改內容--------------------

listen-on port 53 { 192.168.27.101; };

allow-query     { any; };

dnssec-enable no;
dnssec-validation no;

-------------------增加內容-------------------

forwarders      { 114.114.114.114; };  # 設置可用的DNS地址

# 檢查DNS配置文件設置是否成功

sudo named-checkconf   # 沒有報錯表示成功

 

區域配置文件

/etc/named.rfc1912.zones 

---------------增加內容------------------------

zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { 192.168.27.11; };
};

zone "od.com" IN {
type master;
file "od.com.zone";
allow-update { 192.168.27.11; };
};

 

區域數據文件

/var/named/host.com.zone

---------------增加內容----------------------------

$ORIGIN host.com.
$TTL 600        ; 10 minutes
@       IN SOA  dns.host.com. dnsadmin.host.com. (
                                2020071001  ; serial
                                10800       ; refresh (3 hours)
                                900         ; retry (15 minutes)
                                604800      ; expire (1 week)
                                86400       ; minimum (1 day)
                                )
                        NS    dns.host.com.
$TTL 60 ; 1 minute
dns                     A    192.168.27.101
HDSS7-11                A    192.168.27.101
HDSS7-12                A    192.168.27.102
HDSS7-21                A    192.168.27.103
HDSS7-22                A    192.168.27.104
HDSS7-200               A    192.168.27.105

 

/var/named/od.com.zone

---------------增加內容----------------------------

$ORIGIN od.com.
$TTL 600        ; 10 minutes
@       IN SOA  dns.host.com. dnsadmin.od.com. (
                                2020071001    ; serial
                                10800       ; refresh (3 hours)
                                900         ; retry (15 minutes)
                                604800      ; expire (1 week)
                                86400       ; minimum (1 day)
                                )
                        NS    dns.od.com.
$TTL 60 ; 1 minute
dns                     A    192.168.27.101

 

再次效驗dns配置文件

named-checkconf

啟動DNS服務

systemctl start named

使用dig測試解析結果

dig -t A hdss7-21.host.com @192.168.27.101 +short

 

看到此結果表示dns生效,現在就把你本地的dns指向到這個DNS服務器

 vim /etc/sysconfig/network-scripts/ifcfg-ensXXX 

------------------修改配置文件---------------------

DNS1=192.168.27.101   # IP為你搭建的DNS服務器IP

 

Tips: 添加短域名解析

/etc/resolv.conf

# Generated by NetworkManager
search host.com  # 一般僅用於主機域
nameserver 192.168.27.101

# 使用短域名進行ping 也是可以解析

 

 

把所有剩下的服務器全部主DNS修改為192.168.27.101

 

准備簽發證書環境

在運維主機上HDSS7-200(192.168.27.105)上:

CFSSL

是CloudFlare開源的一款PKI/TLS工具。 CFSSL 包含一個命令行工具 和一個用於 簽名,驗證並且捆綁TLS證書的 HTTP API 服務。 使用Go語言編寫。

Github 地址: https://github.com/cloudflare/cfssl
官網地址: https://pkg.cfssl.org/

 

安裝CFSSL

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/bin/cfssl

wget https://pkg.cfssl.org/R1.1/cfssljson_linux-amd64 -O /usr/bin/cfssl-json

wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/bin/cfss-certinfo

chmod +x /usr/bin/cfssl*

 

 

創建一個證書目錄

mkdir -p /opt/certs

sudo sh -c "cfssl print-defaults config > config.json"  # 生成一個配置模板(這個步驟可以省略)

sudo sh -c " cfssl print-defaults csr > ca-csr.json"  # 生成證書信息文件

 

創建文件  /opt/certs/ca-csr.json

 

 

-------------增加內容--------------------------

{
    "CN": "Cdbaidu",
    "hosts": [
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Chengdu",
            "ST": "Chengdu",
            "O": "od",
            "OU": "ops"
        }
    ],
    "ca": {
        "expiry": "175200h"  # 20年
    }
}

 

簽發生產字簽證證書

cfssl gencert -initca ca-csr.json | sudo cfssl-json -bare ca

ca-csr.json # 上面編輯的文件名

ca 前綴

管道后面的是生產.pem文件

 

 

部署docker環境

HDSS7-200(192.168.27.105)

HDSS7-21(192.168.27.103)

HDSS7-22(192.168.27.104)

 

一條命令安裝Docker環境

sh -c "curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun"

查看docker版本

 

 

配置參數

sudo vim /etc/docker/daemon.json

{
    "graph": "/data/docker",
    "storage-driver": "overlay2",
    "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"],
    "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
    "bip": "172.7.21.1/24",  # 這里根據自己HDSS7-21,設置了172.7.21.1/24方便記憶和排錯
    "exec-opts": ["native.cgroupdriver=systemd"],
    "live-restore": true
}

sudo systemctl start docker # 啟動docker服務

 

檢查三台是否都已經成功配置docker引擎

docker version

 

 

部署docker私有鏡像倉庫

HDSS7-200(192.168.27.105)

barbor 官方github地址

 

 

下載完畢后進行解壓 

tar xf harbor-offline-installer-v2.0.1.tgz -C /opt/

mv harbor harbor-v2.0.1  # 增加版本號備注

ln -s /opt/harbor-v2.0.1/ /opt/harbor  # 創建軟鏈接便於以后升級

PS:harbor 依賴 docker-compose

yum install docker-compose -y

 

sudo mkdir -p /data/harbor/logs  # 如果修改了日志存放目錄需要創建對應目錄

 

修改配置文件

cp /opt/harbor/harbor.yml.tmpl /opt/harbor/harbor.yml # 把模板文件變成正式的配置文件

----------------修改下面內容------------------------

http:
port: 180

hostname: harbor.od.com

harbor_admin_password: Harbor12345  # 生產環境自行修改

database:
password: root123  # 生產環境自行修改

data_volume:/data/harbor

location:/data/harbor/logs

 

開始執行harbor 腳本

/opt/harbor/install.sh

 

Note:遇到報錯

ERROR:root:Error: The protocol is https but attribute ssl_cert is not set

方法一: 可以在配置文件里面注釋掉和443相關部分

 

 

 方法二:配置相關https的證書認證

https://www.cnblogs.com/Dev0ps/p/10566398.html

 

腳本執行成功,如下提示:

 

 

 進行自檢,輸入  sudo docker-compose ps

 

 

看到harbor 給我們拉取和啟用的各種鏡像

 

安裝Nginx

yum install nginx -y 

創建配置文件

/etc/nginx/conf.d/harbor.od.com.conf

------------新增如下內容------------

server {
    listen        80;
    server_name   harbor.od.com;

    client_max_body_size 1000m;

    location / {
        proxy_pass http://127.0.0.1:180;
    }
}

檢測nginx配置文件語法是否正常

sudo nginx -t

啟動nginx

systemctl start nginx

systemctl enable nginx

 

PS: 這里為了方便,需要在HDSS7-11(192.168.27.101)添加一條dns記錄.

vi /var/named/od.com.zone

-----------------修改和添加內容(見黃底紅字處)----------------------

$ORIGIN od.com.
$TTL 600        ; 10 minutes
@       IN SOA  dns.host.com. dnsadmin.od.com. (
                                2020071002    ; serial 注意前滾一個序號
                                10800       ; refresh (3 hours)
                                900         ; retry (15 minutes)
                                604800      ; expire (1 week)
                                86400       ; minimum (1 day)
                                )
                        NS    dns.od.com.
$TTL 60 ; 1 minute
dns                     A    192.168.27.101
harbor                  A    192.168.27.105

systemctl restart named

 

添加后進行測試,DNS是否成功

dig -t A harbor.od.com +short

 

使用客戶端訪問:

http://harbor.od.com:180/  # 看到如下界面

 

Harbor 頁面操作 

賬號密碼登陸--新建項目

 

 

 

 

# 在HDSS7-200(192.168.27.105)下載一個公網鏡像

sudo docker pull nginx:1.7.9

docker tag <IMAGE ID > harbor.od.com/public/nginx:v.17.9 # 給公網鏡像打一個tag

docker push harbor.od.com/public/nginx:v1.7.9  # 嘗試推送到我們自己的私有倉庫

Note: 錯誤提示

unauthorized: unauthorized to access repository: public/nginx, action: push: unauthorized to access repository: public/nginx, action: push

原因是需要登陸你的私有倉庫,不然沒有授權網上傳。

docker login harbor.od.com

輸入你私有倉庫的賬號密碼,Push成功

 

 

 

部署Master節點服務

部署etcd集群

集群規划

HDSS7-12    角色:etcd lead      192.168.27.102

HDSS7-21    角色:etcd follow    192.168.27.103

HDSS7-22    角色:etcd follow    192.168.27.104

 

 

創建基於根證書的config配置文件

HDSS7-200(27.105)上 /opt/certs/

vim /opt/certs/ca-config.json 

-----------------------新增以下內容------------------------------

 

 1 {
 2     "signing": {
 3         "default": {
 4             "expiry": "1725200h"
 5         },
 6         "profiles": {
 7             "server": {
 8                 "expiry": "1725200h",
 9                 "usages": [
10                     "signing",
11                     "key encipherment",
12                     "server auth"
13                 ]
14             },
15             "client": {
16                 "expiry": "1725200h",
17                 "usages": [
18                     "signing",
19                     "key encipherment",
20                     "client auth"
21                 ]
22             },
23             "peer": {
24                 "expiry": "1725200h",
25                 "usages": [
26                     "signing",
27                     "key encipherment",
28                     "server auth",
29                     "client auth"
30                 ]
31             }
32         }
33     }
34 }

 

創建etcd-peer-csr文件

vim etcd-peer-csr.json

------------新增以下內容-----------------------

 1 {
 2     "CN": "k8s-etcd",
 3     "hosts": [
 4         "192.168.27.101",
 5         "192.168.27.102",
 6         "192.168.27.103",
 7         "192.168.27.104"
 8     ],
 9     "key": {
10         "algo": "rsa",
11         "size": 2048
12     },
13     "names": [
14         {
15             "C": "CN",
16             "ST": "beijing",
17             "L": "beijing",
18             "O": "od",
19             "OU": "ops"
20         }
21     ]
22 }

 

 簽發證書 

依然保持/opt/crets目錄下(確保上面2個文件已經創建成功)

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json

# 產生簽發證書文件

sudo cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json | sudo cfssl-json -bare etcd-peer

 

 

 

回到節點:HDSS7-12(27.102)上 

創建用戶

useradd -s /sbin/nologin -M etcd

-M 沒有家目錄

 

 

下載etcd的軟件

etcd下載地址

# 教程里面推薦不超過3.3.x的版本

tar zxvf etcd-v3.x.x-linux-amd64.tar.gz -C /opt

cd /opt

ln -s /opt/etcd-v3.x.x /opt/etcd  

創建etcd的證書存放目錄 

sudo mkdir -p /opt/etcd/certs /data/etcd /data/logs/etcd-server

# 拷貝上面生成的證書到/opt/etcd/certs 下面

 

 

給etcd目錄授權權限 

chown -R etcd.etcd /opt/etcd-v3.1.20/

chown -R etcd.etcd /data/etcd

chown -R etcd.etcd /data/logs/etcd-server/

 

創建一個etcd的腳本

/opt/etcd/etcd-server-startup.sh

chmod +x /opt/etcd/etcd-server-startup.sh 

-------------------添加如下內容--------------------------

 1 #!/bin/sh
 2 ./etcd --name etcd-server-7-12 \
 3        --data-dir /data/etcd/etcd-server \
 4        --listen-peer-urls https://192.168.27.102:2380 \
 5        --listen-client-urls https://192.168.27.102:2379,http://127.0.0.1:2379 \
 6        --quota-backend-bytes 8000000000 \
 7        --initial-advertise-peer-urls https://192.168.27.102:2380 \
 8        --advertise-client-urls https://192.168.27.102:2379,http://127.0.0.1:2379 \
 9        --initial-cluster etcd-server-7-12=https://192.168.27.102:2380,etcd-server-7-21=https://192.168.27.103:2380,etcd-server-7-22=https://192.168.27.104:2380 \
10        --ca-file ./certs/ca.pem \
11        --cert-file ./certs/etcd-peer.pem \
12        --key-file ./certs/etcd-peer-key.pem \
13        --client-cert-auth \
14        --trusted-ca-file ./certs/ca.pem \
15        --peer-ca-file ./certs/ca.pem \
16        --peer-cert-file ./certs/etcd-peer.pem \
17        --peer-key-file ./certs/etcd-peer-key.pem \
18        --peer-client-cert-auth \
19        --peer-trusted-ca-file ./certs/ca.pem \
20        --log-output stdout

 

# 安裝一個輔助工具(用於讓腳本自動運行,如果腳本停止自動啟動)

yum install supervisor -y

systemctl start supervisord

systemctl enable supervisord

 

設置supervisor啟動設置文件

vim /etc/supervisord.d/etcd-server.ini

-------------------添加下面內容------------------------

 1 [program: etcd-server-7-12]
 2 command=/opt/etcd/etcd-server-startup.sh
 3 numprocs=1
 4 directory=/opt/etcd 
 5 autostart=true 
 6 autorestart=true 
 7 startsecs=30
 8 startretries=3
 9 exitcodes=0,2
10 stopsignal=QUIT
11 stopwaitsecs=10
12 user=etcd
13 redirect_stderr=true
14 stdout_logfile=/data/logs/etcd-server/etcd.stdout.1og
15 stdout_logfile_maxbytes=64MB
16 stdout_logfile_backups=4
17 stdout_capture_maxbytes=1MB
18 stdout_events_enabled=false

 

開始操作supervisor

supervisorctl update

supervisorctl status

 

# 查看啟動日志

tail -fn 200 /data/logs/etcd-server/etcd.stdout.1og

# 查看端口是否正常開啟

 

sudo netstat -luntp |grep etcd

 

 

PS:3個節點都按照上面配置,注意標黃部分自己需要修改。

 

檢查集群的健康狀態

進入任意節點目錄/opt/etcd/下,執行

./etcdctl cluster-health 

 

 

./etcdctl member list  # 通過這個命令可以查看到當前集群的leader

 

 

 部署kube-apiserver集群

HDSS7-21(27.103)

HDSS7-22(27.104)

 

這里部署以HDSS7-21 為例,另外一台配置相同

kubernetes 官方github地址 

kubernetes下載地址 

v1.15.2   v1.18.5

tar xf kubernetes-server-linux-amd64-v1.18.5.tar.gz -C /opt

cd /opt

mv kubernetes-server-linux-amd64 kubernetes-v1.18.5

ln -s kubernetes-v1.18.5 kubernetes

 

清理二進制安裝無用包(可選)

/opt/kubernets/kubernetes-src.tar.gz  # go語言源碼包

/opt/kubernetes/server/bin 下面所有tar包和_tag(docker鏡像)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM