1. 程式人生 > 其它 >k8s元件介紹以及kubeasz二進位制安裝

k8s元件介紹以及kubeasz二進位制安裝

一 k8s元件功能

1 kube-apiserver

kube-apiserver | Kubernetes 官方介紹
API server 提供了k8s各類資源物件的增刪改查以及watch等http rest介面。所有其他元件都它進行通訊。是叢集的統一入口,預設埠為6443

2 kube-scheduler

kube-scheduler | Kubernetes 官方介紹
排程器,負責將pod指派到某個節點上,先排除不符合條件的節點,然後在剩餘的節點進行刪選,最後選中節點,建立pod.

3 kube-controller-manager

kube-controller-manager | Kubernetes 官方介紹
負責維護叢集的狀態,比如程式部署,故障檢查,自動擴充套件,滾動更新,確保叢集中的pod正常工作

4 kube-proxy

kube-proxy | Kubernetes 官方介紹
執行在每個節點上,監聽apiserver中服務物件的變化,再通過iptables或者ipvs實現網路的轉發。主要負責叢集內部的網路通訊

5 kublet

kubelet | Kubernetes 官方介紹
kubelet 是執行在每個node節點上的代理元件,它監視每個node上的pod.
負責上master彙報node節點的健康狀態
接受指令並在pod中建立docker容器
準備pod所需的資料卷
返回pod的執行狀態
在node節點執行容器健康檢查

6 kubectl

kubectl | Kubernetes
是叢集管理的客戶端工具

7 etcd

為 Kubernetes 執行 etcd 叢集 | Kubernetes
負責儲存叢集中各種資源物件資訊

8 dns

自定義 DNS 服務 | Kubernetes 官方介紹
負責為整個叢集提供dns服務,從而實現服務直接的訪問

二 k8s中建立pod的排程流程

1.使用者使用create/apply yaml建立pod,請求給apiseerver,apiserver將yaml中的屬性資訊(metadata)寫入etcd。
2.apiserver觸發watch機制準備建立pod,資訊轉發給排程器,排程器使用排程演算法選擇node,排程器將node資訊給apiserver,apiserver_將繫結的node資訊寫入etcd。
3.apiserver又通過watch機制,呼叫kubelet,指定pod資訊,觸發docker run命 令建立容器。
4.建立完成之後反饋給kubelet,kubelet又將pod的狀態資訊給apiserver,apiserver又將pod的狀態資訊寫入etcd。
5.其中kubectl get pods命令呼叫的時etcd_的資訊。

三 k8s系統環境準備

1 環境說明:

2 master 2etcd 2node 2高可用+harbor
虛擬vip 172.31.7.188
centos7.9
k8s.1.23
docker: docker-19.03.15-binary-install.tar.gz

2 所有伺服器進行時間同步

echo "*/5 * * * * ntpdate time1.aliyun.com &> /dev/null  && hwclock -w" >> /var/spool/cron/crontabs/root

3 系統初始化

主機名,ip,系統引數優化,seliunx關閉,開啟ip轉發

hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
hostnamectl set-hostname k8s-etcd1
hostnamectl set-hostname k8s-etcd2
hostnamectl set-hostname k8s-master1
hostnamectl set-hostname k8s-master2
hostnamectl set-hostname k8s-ha1
hostnamectl set-hostname k8s-ha2

四 高可用伺服器安裝

1 安裝haproxy,keepalived

yum install keepalived
yum install haproxy

2 keepalivd主配置檔案如下:

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      172.31.7.188 dev ens33 label ens33:1
    }
}

3 啟動keepalived

systemctl enable keepalived
 systemctl start keepalived

從配置檔案要更改一下權重,還有MASTER變為BACKUP

然後用ifconfig可以檢視vip是否存在。

4 haproxy配置檔案,兩臺配置一樣

listen k8s_api_nodes_6443
   bind 172.31.7.188:6443
   mode tcp
   server 172.31.7.101 172.31.7.101:6443 check inter 2000 fall 3 rise 5
   server 172.31.7.102 172.31.7.102:6443 check inter 2000 fall 3 rise 5

5 啟動haproxy


systemctl start haproxy
 systemctl enable haproxy

五 在各個master和node節點 還有harbor上都安裝docker

1 安裝docker

cd /usr/local/src
tar -zxvf docker-19.03.15-binary-install.tar.gz 

  ./docker-install.sh 

六 安裝harbor並啟用https

1 生成證書


cd /usr/local/src
mkdir app
cd app
tar -zxvf harbor-offline-installer-v2.4.2.tgz 
# 生成證書
openssl genrsa -out /usr/local/src/app/harbor/certs/harbor-ca.key
 openssl req -x509 -new -nodes -key ./harbor-ca.key  -subj "/CN=harbor.magedu.local" -days 7120 -out ./harbor-ca.crt

2 更改配置檔案


[root@k8s-harbor01 harbor]# pwd
/usr/local/src/app/harbor
[root@k8s-harbor01 harbor]# cp harbor.yml.tmpl harbor.yml
# 配置檔案只更改了如下選項,hostname,證書,密碼
grep -v "^#" harbor.yml |grep -v "^$"|grep -v "#"
hostname: harbor.magedu.local
http:
  port: 80
https:
  port: 443
  certificate: /usr/local/src/app/harbor/certs/harbor-ca.crt
  private_key: /usr/local/src/app/harbor/certs/harbor-ca.key
harbor_admin_password: 123456

3 安裝

./install.sh --with-trivy
./install.sh --help 
執行完之後服務會自動啟動

額外補充命令:

停止命令 docker-compose stop
啟動命令 docker-compose up -d
刪除映象  docker-compose down --rmi  all

docker-compose down [options]

停止和刪除容器、網路、卷、映象。 選項包括:
–rmi type,刪除映象,型別必須是:all,刪除compose檔案中定義的所有映象;local,刪除映象名為空的映象
-v, –volumes,刪除已經在compose檔案中定義的和匿名的附在容器上的資料卷
–remove-orphans,刪除服務中沒有在compose中定義的容器

七 部署節點同步證書


 ### 1 部署節點建立這個目錄(也就是我的master節點)
 mkdir -p /etc/docker/certs.d/harbor.magedu.local
# harbor上拷貝證書到部署節點
[root@k8s-harbor01 harbor]# scp -r /usr/local/src/app/harbor/certs/harbor-ca.crt [email protected]:/etc/docker/certs.d/harbor.magedu.local

2 新增hosts檔案

[root@k8s-master01 ~]# cat /etc/hosts
172.31.7.109 harbor.magedu.local

重啟docker
systemctl restart docker

3 登入,並上傳映象

docker login harbor.magedu.com

docker pull alpine

  docker  tag alpine harbor.magedu.com/library/alpine:mage

  docker push harbor.magedu.com/library/alpine:mage

效果如圖所示:

八 利用kubeasz進行叢集安裝

https://gitee.com/ilanni/kubeasz 版本對比

1 安裝ansible

yum install epel-release
yum install ansible

2 生成金鑰並拷貝到各個節點

ssh-keygen

拷貝指令碼如下:

#!/bin/bash
ip="
172.31.7.102
172.31.7.111
172.31.7.112
172.31.7.106
172.31.7.107
"
for node in ${ip};do
  sshpass -p redhat ssh-copy-id ${node} -o StrictHostKeyChecking=no
  if [ $? -eq 0 ];then
    echo "${node}金鑰拷貝完成"
  else
    echo "${node}金鑰拷貝失敗"
  fi
done

3 下載kubeasz 專案原始碼

不同的kubeasz版本,安裝的k8s版本也不一樣

# 下載工具指令碼ezdown,舉例使用kubeasz版本3.0.0
export release=3.2.0
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
# 使用工具指令碼下載
./ezdown -D

下載好的指令碼包括映象都存放到了/etc/kubeasz 這個目錄

4 建立叢集並生成配置檔案

[root@k8s-master02 kubeasz]# ./ezctl new k8s-cluster01
2022-04-16 18:40:43 DEBUG generate custom cluster files in /etc/kubeasz/clusters/k8s-cluster01
2022-04-16 18:40:43 DEBUG set versions
2022-04-16 18:40:44 DEBUG disable registry mirrors
2022-04-16 18:40:44 DEBUG cluster k8s-cluster01: files successfully created.
2022-04-16 18:40:44 INFO next steps 1: to config '/etc/kubeasz/clusters/k8s-cluster01/hosts'
2022-04-16 18:40:44 INFO next steps 2: to config '/etc/kubeasz/clusters/k8s-cluster01/config.yml'



5 編輯host檔案

vim /etc/kubeasz/clusters/k8s-cluster01/hosts


[etcd]
172.31.7.106
172.31.7.107
[kube_master]
172.31.7.101
172.31.7.102
[kube_node]
172.31.7.111
172.31.7.112
[harbor]
[ex_lb]
172.31.7.109 LB_ROLE=backup EX_APISERVER_VIP=172.31.7.188 EX_APISERVER_PORT=6443
172.31.7.110 LB_ROLE=master EX_APISERVER_VIP=172.31.7.188 EX_APISERVER_PORT=6443
[chrony]
[all:vars]
SECURE_PORT="6443"
CONTAINER_RUNTIME="docker"
CLUSTER_NETWORK="calico"
PROXY_MODE="ipvs"
SERVICE_CIDR="10.200.0.0/16"
CLUSTER_CIDR="10.100.0.0/16"
NODE_PORT_RANGE="30000-65000"
CLUSTER_DNS_DOMAIN="magedu.local"
bin_dir="/opt/kube/bin"
base_dir="/etc/kubeasz"
cluster_dir="{{ base_dir }}/clusters/k8s-cluster01"
ca_dir="/etc/kubernetes/ssl"

6 編輯config.yml

改證書時間
改k8s 叢集 master 節點證書配置,可以新增多個ip和域名(比如增加公網ip和域名)

改node節點最大的pod數量
改harbor信任的節點,只針對http的,https不用配置
改calico ,預設就可以
改dns快取,預設是true,線上環境可以是true

7 安裝

./ezctl setup k8s-cluster01 01   #第一步
./ezctl setup k8s-cluster01 02
./ezctl setup k8s-cluster01 03
./ezctl setup k8s-cluster01 04
./ezctl setup k8s-cluster01 05