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