7.k8s入門:kube-apiserver部署(二進位制包離線安裝)
一、概述
Kube-Master相關的服務:
- kube-apiserver
- kube-controller-manager
- kube-scheduler。
kube-apiserver是無狀態的,客戶端如kubelet可通過啟動引數"–api-servers"指定多個api-server,但只有第一個生效,即指定的多個api-server並沒有達到高可用的目的(可能在後續版本解決),所以可通過負載均衡做api-server的HA。
kube-controller-manager與kube-scheduler會修改叢集的狀態資訊,如果3個節點上的相關服務同時生效則會有同步與一致性問題,所以此兩種服務各自內部只能是主備的關係,kukubernetes採用租賃鎖(lease-lock)實現leader的選舉,具體到kube-controller-manager與kube-scheduler,啟動時帶上引數"–leader-elect=true"。
1.1 環境準備
1.1.1 機器
主機IP | 角色 |
---|---|
172.25.78.55 | master1 worker1 |
172.25.78.56 | master2 worker2 |
172.25.78.57 | master3 worker3 |
節點 | 需要安裝的元件 |
---|---|
master | kube-apiserver kube-controller-manager kube-scheduler |
worker | kube-proxy kubelet |
1.1.2 安裝包
- kubernetes-server-linux-amd64.tar.gz
參考3.k8s入門:k8s部署之二進位制包離線安裝(x86伺服器)教程下載
二、安裝
2.1 使用cfssl工具集建立CA證書
如果沒有安裝cfssl,請按照3.k8s入門:cfssl部署(二進位制包離線安裝)教程安裝。
下面步驟只需要在一個節點上執行
【step.1 建立kube-apiserver證書和私鑰配置檔案】
cd /root/k8s/cert/kube-apiserver
cat > apiserver-csr.json <<EOF
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"172.25.78.55",
"172.25.78.56",
"172.25.78.57",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "cloudteam"
}
]
}
EOF
# hosts欄位不為空時,指定授權使用該證書的ip與域名列表;
# 在叢集中的一個節點上生成證書,然後分發給其他節點即可;
# 同時指定叢集內部多個域名與kube-apiserver註冊的名為kubernetes的服務ip(Service Cluster IP),一般是--service-cluster-ip-range 選項值指定的網段的第一個IP
【step.2 生成kube-apiserver證書和私鑰】
cfssl gencert -ca=/root/k8s/cert/ca.pem \
-ca-key=/root/k8s/cert/ca-key.pem \
-config=/root/k8s/cert/ca-config.json \
-profile=kubernetes apiserver-csr.json | cfssljson -bare apiserver
【step.3 分發證書到其它節點上】
scp apiserver*pem 172.25.78.56:/root/k8s/cert/kube-apiserver
scp apiserver*pem 172.25.78.57:/root/k8s/cert/kube-apiserver
【step.4 建立kube-apiserver使用的客戶端token檔案】
kubelet 啟動時向 kube-apiserver傳送註冊資訊,在雙向的TLS加密通訊環境中需要認證,手工為kubelet生成證書/私鑰在node節點較少且數量固定時可行,採用TLS Bootstrapping 機制,可使大量的node節點自動完成向kube-apiserver的註冊請求。
原理:kubelet 首次啟動時向 kube-apiserver 傳送 TLS Bootstrapping 請求,kube-apiserver 驗證 kubelet 請求中的 token 是否與它配置的 token.csv 一致,如果一致則自動為 kubelet生成證書和祕鑰。
mkdir -p /etc/kubernetes/bootstrap/ & cd /etc/kubernetes/bootstrap/
cat > token.csv << EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
scp /etc/kubernetes/bootstrap/token.csv root@172.25.78.56:/etc/kubernetes/bootstrap/
scp /etc/kubernetes/bootstrap/token.csv root@172.25.78.57:/etc/kubernetes/bootstrap/
2.2 安裝kube-apiserver
所有節點都要執行下面的步驟
【step.1 解壓】
cd /root/k8s/package
tar -zxvf kubernetes-server-linux-amd64.tar.gz
【step.2 複製到/usr/bin】
cd kubernetes/server/bin/
cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/bin/
【step.3 設定系統服務】
# 1.進入/usr/lib/systemd/system
cd /usr/lib/systemd/system
# 2.建立kube-apiserver的啟動檔案
vi kube-apiserver.service
# 將下面內容複製到kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
After=etcd.service
[Service]
EnvironmentFile=/root/k8s/conf/apiserver.conf
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
【step.4 設定配置】
# 根據kube-apiserver.service中EnvironmentFile項設定的配置檔案路徑,建立kube-apiserver的配置檔案
vi /root/k8s/conf/apiserver.conf
# 將下面內容複製到apiserver.conf
KUBE_API_ARGS="--logtostderr=false \
--v=2 \
--log-dir=/var/log/kubernetes/apiserver \
--etcd-servers=https://172.25.78.55:2379,https://172.25.78.56:2379,https://172.25.78.57:2379 \
--bind-address=172.25.78.55 \
--secure-port=6443 \
--advertise-address=172.25.78.55 \
--allow-privileged=true \
--service-cluster-ip-range=10.0.0.0/24 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode=Node,RBAC \
--enable-bootstrap-token-auth=true \
--token-auth-file=/etc/kubernetes/bootstrap/token.csv \
--service-node-port-range=30000-32767 \
--storage-backend=etcd3 \
--kubelet-client-certificate=/root/k8s/cert/kube-apiserver/apiserver.pem \
--kubelet-client-key=/root/k8s/cert/kube-apiserver/apiserver-key.pem \
--tls-cert-file=/root/k8s/cert/kube-apiserver/apiserver.pem \
--tls-private-key-file=/root/k8s/cert/kube-apiserver/apiserver-key.pem \
--client-ca-file=/root/k8s/cert/ca.pem \
--service-account-key-file=/root/k8s/cert/ca-key.pem \
--etcd-cafile=/root/k8s/cert/ca.pem \
--etcd-certfile=/root/k8s/cert/kube-apiserver/apiserver.pem \
--etcd-keyfile=/root/k8s/cert/kube-apiserver/apiserver-key.pem \
--audit-log-maxage=30 \
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--audit-log-path=/var/lib/audit.log"
# --admission-control:kuberneres叢集的准入控制機制,各控制模組以外掛的形式依次生效,叢集時必須包含ServiceAccount;
# --bind-address:不能為 127.0.0.1;在本地址的6443埠開啟https服務,預設值0.0.0.0;
# --insecure-port=0:禁用不安全的http服務,預設開啟,埠8080,設定為0禁用;
# --secure-port=6443:https安全埠,預設即6443,0表示禁用;
# --authorization-mode:在安全埠使用 RBAC 授權模式,未通過授權的請求拒絕;
# --service-cluster-ip-range:指定 Service Cluster IP 地址段,該地址段外部路由不可達;
# --service-node-port-range:指定 NodePort 的埠範圍;
# --storage-backend:持久化儲存型別,v1.6版本後預設即etcd3;
# --enable-swagger-ui:設定為true時,啟用swagger-ui網頁,可通過apiserver的usl/swagger-ui訪問,預設為false;
# --allow-privileged:設定為true時,kubernetes允許在Pod中執行擁有系統特權的容器應用;
# --audit-log-*:審計日誌相關;
# --event-ttl:apiserver中各時間保留時間,預設即1h,通常用於審計與追蹤;
# --logtostderr:預設為true,輸出到stderr,不輸出到日誌;
# --log-dir:日誌目錄;
# --v:日誌級別
【step.5 建立日誌目錄】
mkdir -p /var/log/kubernetes/apiserver
【step.6 啟動並設定開機自啟】
systemctl daemon-reload
systemctl enable kube-apiserver
systemctl start kube-apiserver
【step.7 驗證是否啟動成功】
# systemctl status kube-apiserver
● kube-apiserver.service - Kubernetes API Server
Loaded: loaded (/usr/lib/systemd/system/kube-apiserver.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-10-29 05:06:55 EDT; 8min ago
Docs: https://github.com/GoogleCloudPlatform/kubernetes
Main PID: 30742 (kube-apiserver)
Tasks: 30
Memory: 229.8M
CGroup: /system.slice/kube-apiserver.service
└─30742 /usr/bin/kube-apiserver --logtostderr=false --v=2 --log-dir=/var/log/kubernetes/apiserver --etcd-servers=http://172.25.78.56:2379,http://172.25.78.58:2379 --bind-address=172.25.78.58 --secure-port=6443 --advertise-address=172.25.78.58 --allow-privile...
# 如果有問題,執行下面命令檢視報錯資訊
journalctl -xe
相關文章
- 03二進位制包安裝與介紹
- 【ubuntu】使用二進位制安裝包安裝node和npm並配置UbuntuNPM
- Ubuntu24 二進位制包安裝mysql5.7UbuntuMySql
- PostgreSQL 10.23 二進位制安裝SQL
- PostgreSQL二進位制安裝流程SQL
- 二進位制檔案安裝安裝etcd
- 【Linux合集】二進位制安裝mysqlLinuxMySql
- Mysql for Linux安裝配置之——二進位制安裝MySqlLinux
- Kubernetes部署-二進位制方式
- Ubuntu 24.04 二進位制安裝 MySQL 8.0.20UbuntuMySql
- 二進位制安裝 Docker 以及 Docker ComposeDocker
- Linux安裝二進位制PHP7.2LinuxPHP
- centos 7 二進位制安裝mysql 5.7.25CentOSMySql
- RHEL 7.2 安裝二進位制MySQL 5.7.18MySql
- 二進位制下載部署NginxNginx
- centos7二進位制方式安裝rabbitmqCentOSMQ
- 二進位制方式安裝 k8sK8S
- 基於LINUX的MySql二進位制本地安裝和部署實施測試LinuxMySql
- mysql5.7 for windows二進位制安裝及配置MySqlWindows
- CentOS7 安裝 MySQL8.0(二進位制)CentOSMySql
- 二進位制部署 Prometheus+Alertmanager+GrafanaPrometheusGrafana
- 03 . 二進位制部署kubernetes1.18.4
- k8s二進位制部署K8S
- kubernetes——二進位制多節點部署
- 二進位制與二進位制運算
- 進位制詳解:二進位制、八進位制和十六進位制
- Windows11二進位制方式安裝MySQL5.7.44WindowsMySql
- Postgresql13.1-1 win10二進位制安裝SQLWin10
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- 【Redis】原始碼編譯二進位制包Redis原始碼編譯
- 基於centos7的MySQL8.0二進位制安裝包的本地升級CentOSMySql
- 基於centos7的MySQL5.7二進位制安裝包的本地升級CentOSMySql
- 二進位制
- (二進位制)
- 十進位制——二 (八、十六 )進位制
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 二進位制安裝Kubernetes(k8s)v1.31.1K8S
- window環境的openssl二進位制發行版安裝