樹莓派centos7-arm64-安裝k8s 1.18版本

安裝清單:

k8s 主節點的服務安裝

服務名name資料庫etcd介面服務kube-apiserver控制管理服務kube-controller-manager任務排程服務kube-scheduler

服務名 name

資料庫 etcd

介面服務 kube-apiserver

控制管理服務 kube-controller-manager

任務排程服務 kube-scheduler

服務名 name

容器管理 docker

客戶端 kubelet

代理 kube-proxy

一。k8s需要安裝etcd,因此需要使用安裝etcd的命令

1。systemctl daemon-reload2。systemctl enable etcd。service3。systemctl start etcd。service

————————————

檢查是否安裝成功

etcdctl cluster-health

————————

防火牆開啟埠

irewall-cmd ——zone=public ——add-port=2379/tcp ——permanentfirewall-cmd ——zone=public ——add-port=2380/tcp ——permanentfirewall-cmd ——reloadfirewall-cmd ——list-all

預設的資料目錄檔案

配置檔案:vi /usr/lib/systemd/system/etcd。service

WorkingDirectory=/var/lib/etcd/

EnvironmentFile=-/etc/etcd/etcd。conf

二。安裝kube-apiservice

1。將kube-apiservice檔案複製到/usr/local/bin目錄下

2。編輯/usr/lib/systemd/system/kube-apiservice。service檔案和/etc/k8s/apiserver檔案

不考慮安全設定的簡單配置, ——etcd-servers=http://127。0。0。1:2379這裡配置一定注意,不是https。另外下面兩個檔案建議分開,我本地不分開寫,有問題,具體原因暫且不明,可能是因為寫在一行裡面有問題

[Unit]Description=Kubernetes API ServerDocumentation=https://github。com/GoogleCloudPlatform/kubernetesAfter=etcd。serviceWants=etcd。service[Service]EnvironmentFile=/etc/k8s/apiserverExecStart=/usr/local/bin/kube-apiserver $KUBE_API_ARGSRestart=on-failureRestartSec=5Type=notifyLimitNOFILE=65536[Install]WantedBy=multi-user。target

建立檔案:/etc/k8s/apiserver 。

檔案內容:

KUBE_API_ARGS=“——storage-backend=etcd3 ——etcd-servers=http://127。0。0。1:2379 ——insecure-bind-address=0。0。0。0 ——insecure-port=8080 ——service-cluster-ip-range=169。169。0。0/16 ——service-node-port-range=1-65535 ——admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota ——logtostderr=false ——log-dir=/var/log/k8s ——v=2”~

啟動

[root@localhost ssl]# systemctl daemon-reload[root@localhost ssl]# systemctl enable kube-apiserver[root@localhost ssl]# systemctl stop kube-apiserver[root@localhost ssl]# systemctl start kube-apiserver

檢視啟動錯誤資訊的命令:

cat /var/log/messages|grep kube-apiserver|grep -i error

考慮安全的配置,前提是生成數字證書

[root@localhost system]# vi kube-apiserver。service [Unit]Description=Kubernetes API ServerDocumentation=https://github。com/GoogleCloudPlatform/kubernetesAfter=etcd。serviceWants=etcd。service[Service]EnvironmentFile=/etc/k8s/apiserverExecStart=/usr/local/bin/kube-apiserver $KUBE_API_ARGSRestart=on-failureRestartSec=5Type=notifyLimitNOFILE=65536[Install]WantedBy=multi-user。target

KUBE_API_ARGS=“——storage-backend=etcd3 ——etcd-servers=http://127。0。0。1:2379 ——insecure-bind-address=0。0。0。0 ——insecure-port=8080 ——service-cluster-ip-range=169。169。0。0/16 ——service-node-port-range=1-65535 ——client-ca-file=/var/run/k8s/ssl/ca。crt ——tls-private-key-file=/var/run/k8s/ssl/server。key ——tls-cert-file=/var/run/k8s/ssl/server。crt ——admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota ——logtostderr=false ——log-dir=/var/log/k8s ——v=2”

三。安裝kube-controller-manager

需要建立一個啟動檔案,一個啟動引數的配置檔案。兩個檔案要分開,合在一塊容易出現格式上的問題。

1。 啟動檔案:vi /lib/systemd/system/kube-controller-manager。service

[Unit]Description=Kubernetes Controller ManagerDocumentation=https://github。com/GoogleCloudPlatform/kubernetesAfter=kube-apiserver。serviceRequires=kube-apiserver。service[Service]EnvironmentFile=/etc/k8s/controller-managerExecStart=/usr/local/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGSRestart=on-failureLimitNOFILE=65536RestartSec=5[Install]WantedBy=multi-user。target

2。配置檔案:vi vi /etc/k8s/controller-manager

KUBE_CONTROLLER_MANAGER_ARGS=“——master=http://192。168。0。200:8080 ——logtostderr=false ——log-dir=/var/log/k8s ——v=2”

3。操作命令:

[root@localhost system]# systemctl daemon-reload[root@localhost system]# systemctl enable kube-controller-manager。service[root@localhost system]# systemctl start kube-controller-manager。service[root@localhost system]# systemctl status kube-controller-manager。service

檢視錯誤資訊的命令

cat /var/log/messages|grep kube-controller-manager|grep -i error

四。安裝

kube-scheduler

二進位制方式啟動,需要建立啟動檔案,以及啟動引數配置檔案。

1。vi /usr/lib/systemd/system/kube-scheduler。service

[Unit]Description=Kubernetes SchedulerDocumentation=https://github。com/GoogleCloudPlatform/kubernetes After=kube-apiserver。serviceRequires=kube-apiserver。service [Service]EnvironmentFile=/etc/k8s/schedulerExecStart=/opt/kubernetes/bin/kube-scheduler $KUBE_SCHEDULER_ARGS Restart=on-failureRestartSec=5 [Install]WantedBy=multi-user。target

2。vi /etc/k8s/scheduler

KUBE_SCHEDULER_ARGS=“——master=http://192。168。0。200:8080 ——logtostderr=false ——log-dir=/var/log/k8s ——v=2”

下面安裝的是node節點上的

五。

1。docker安裝

# 檢視docker版本yum ——list |grep docker# 確定是否滿足k8s版本支援 #安裝 yum install -y docker # 啟動systemctl daemon-reloadsystemctl enable dockersystemctl start dockersystemctl status docker ==========================================[root@localhost package]# systemctl status docker● docker。service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker。service; enabled; vendor preset: disabled) Active: active (running) since 四 2020-08-13 10:53:33 CST; 16s ago Docs: http://docs。docker。com Main PID: 1355 (dockerd-current) CGroup: /system。slice/docker。service ├─1355 /usr/bin/dockerd-current ——add-runtime docker-runc=/usr/libexec/docker/docker-runc-current ——default-runtime=docker-runc ——exec-opt native。cgr。。。 └─1365 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd。sock ——metrics-interval=0 ——start-timeout 2m ——st。。。 8月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。058592508+08:00” level=warning msg=“Your kernel does not support cgroup blkio weight”8月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。058635766+08:00” level=warning msg=“Your kernel does not support cgroup blk。。。t_device”8月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。059606023+08:00” level=info msg=“Loading containers: start。”8月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。175660333+08:00” level=info msg=“Firewalld running: true”8月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。553499915+08:00” level=info msg=“Default bridge (docker0) is assigned with 。。。 address”8月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。872757438+08:00” level=info msg=“Loading containers: done。”8月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。983903855+08:00” level=info msg=“Daemon has completed initialization”8月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。984006334+08:00” level=info msg=“Docker daemon” commit=“64e9980/1。13。1” gra。。。on=1。13。18月 13 10:53:32 localhost dockerd-current[1355]: time=“2020-08-13T10:53:32。998846141+08:00” level=info msg=“API listen on /var/run/docker。sock”8月 13 10:53:33 localhost systemd[1]: Started Docker Application Container Engine。Hint: Some lines were ellipsized, use -l to show in full。

2。k

ubelet安裝

k

ubelet是node節點上的服務,所以該配置是在node節點上操作的,不是master節點進行操作

kubelet是要找到對應master節點上的api-server服務地址的,在配置中需要用到。這裡有個坑,kubernetes實踐指南上的配置,——api-servers在版本1。8。0版本是找不到的,1。8。0版本需要按照以下的配置

本文章是按照從原始碼編譯,按照二進位制方式部署k8s的,如果用kubeadm安裝的,不需要複製檔案

1。複製可執行二進位制檔案到對應目錄下/usr/local/bin (該目錄要保證已經在/etc/profile的path中已經部署過)

cp /opt/package/k8s/kubernetes/_output/local/go/bin/kubelet /usr/local/bin

2。配置啟動檔案

[Unit]Description=Kubernetes Kubelet ServerDocumentation=https://github。com/GoogleCloudPlatform/kubernetesAfter=docker。serviceRequires=docker。service [Service]WorkingDirectory=/var/lib/kubeletEnvironmentFile=/etc/k8s/kubeletExecStart=/usr/local/bin/kubelet $KUBELET_ARGSRestart=on-failure [Install]WantedBy=multi-user。target

3。配置啟動引數 vi /etc/k8s/kubelet (由於k8s 18版本使用了可自動生成客戶端證書的方式,(雖然我們配置了自己的證書的方式),所以配置的時候,和網上其他版本的配置方式有不小的差異)

KUBELET_ARGS=“——hostname-override=192。168。0。200 ——node-ip=192。168。0。201 ——network-plugin=cni ——cert-dir=/etc/k8s/ssl ——protect-kernel-defaults=true ——bootstrap-kubeconfig=/etc/k8s/cfg/bootstrap。kubeconfig ——kubeconfig=/etc/k8s/kubeconfig ——config=/etc/k8s/cfg/kubelet-config。yml ——logtostderr=false ——log-dir=/var/log/k8s ——v=2”

再新建 ——bootstrap-kubeconfig=/etc/k8s/cfg/bootstrap。kubeconfig ——kubeconfig=/etc/k8s/kubeconfig ——config=/etc/k8s/cfg/kubelet-config。yml 對應的三個檔案

vi /etc/k8s/kubeconfig

apiVersion: v1clusters:- cluster: certificate-authority: /etc/k8s/ssl/ca。crt server: https://192。168。0。200:6443 name: k8s-3dcontexts:- context: cluster: k8s-3d user: kubelet-bootstrap name: defaultcurrent-context: defaultkind: Configpreferences: {}users:- name: kubelet-bootstrap user: token: c47ffb939f5ca36231d9e3121a252940

注:token: c47ffb939f5ca36231d9e3121a252940 要和master生成的token。CSV裡的內容保持一致;我這裡使用了自己透過openssl建立的證書certificate-authority: /etc/k8s/ssl/ca。crt 。是master中的根證(根證的字尾有crt,pem等,根據生成證書方式不同會有差異,這裡需要特別注意和自己的證書名稱和目錄要一致)。

vi /etc/k8s/kubeconfig

apiVersion: v1kind: Configusers:- name: kubelet user: client-certificate: /etc/k8s/ssl/kubelet_client。crt client-key: /etc/k8s/ssl/kubelet_client。keyclusters: - name: k8s-3d cluster: certificate-authority: /etc/k8s/ssl/ca。crtcontexts: - context: cluster: k8s-3d user: kubelet name: my-contextcurrent-context: my-context

注:這裡配置了kubelet的客戶端證書和私鑰。之所以設定,是因為我們用的是自己生成的證書,沒有使用從api-server分配的方式。如果不想這麼麻煩,可以使用分配證書的方式獲取,不過要對應正確的token值才行

vi /etc/k8s/cfg/kubelet-config。yml

kind: KubeletConfigurationapiVersion: kubelet。config。k8s。io/v1beta1address: 0。0。0。0port: 10250readOnlyPort: 10255cgroupDriver: cgroupfsclusterDNS:- 169。169。0。1clusterDomain: cluster。localfailSwapOn: falseauthentication: anonymous: enabled: false webhook: cacheTTL: 2m0s enabled: true x509: clientCAFile: /etc/k8s/ssl/ca。crtauthorization: mode: Webhook webhook: cacheAuthorizedTTL: 5m0s cacheUnauthorizedTTL: 30sevictionHard: imagefs。available: 15% memory。available: 100Mi nodefs。available: 10% nodefs。inodesFree: 5%maxOpenFiles: 1000000maxPods: 110

注: x509:

clientCAFile: /etc/k8s/ssl/ca。crt 這裡對應的是從master複製到node節點的根證

4。檢視錯誤

cat /var/log/messages|grep kubelet|grep -i error

注:啟動以後可能會立馬停止,失敗。原因可能是因為需要master節點上建立ca證書,api-server配置證書的原因

3。

kube-proxy的安裝

node節點上,配置kube-proxy步驟。

1。建立kube-proxy。service啟動檔案

vi /usr/lib/systemd/system/kube-proxy。service

[Unit]Description=Kubernetes Kube-Proxy ServerDocumentation=https://github。com/GoogleCloudPlatform/kubernetesAfter=network。targetRequires=network。service [Service]EnvironmentFile=/etc/k8s/proxyExecStart=/usr/local/bin/kube-proxy $KUBE_PROXY_ARGSRestart=on-failureLimitNOFILE=65536 [Install]WantedBy=multi-user。target

2。配置啟動引數

vi /etc/k8s/proxy

KUBE_PROXY_ARGS=“——master=https://192。168。0。200:6443 ——hostname-override=https://192。168。0。200:6443 ——kubeconfig=/etc/k8s/kube-proxy。config ——config=/etc/k8s/cfg/kube-proxy-config。yml ——logtostderr=true ——log-dir=/var/log/k8s ——v=2”

配置檔案 vi /etc/k8s/cfg/kube-proxy-config。yml

kind: KubeProxyConfigurationapiVersion: kubeproxy。config。k8s。io/v1alpha1address: 0。0。0。0metricsBindAddress: 0。0。0。0:10249iclientConnection: kubeconfig: /etc/k8s/kube-proxy。kubeconfighostnameOverride: k8s-node-1clusterCIDR: 169。169。0。1/24mode: ipvsipvs: scheduler: “rr”iptables: masqueradeAll: true

vi /etc/k8s/kube-proxy。kubeconfig

apiVersion: v1clusters:- cluster: certificate-authority: /etc/k8s/ssl/ca。crt server: https://192。168。0。200:6443 name: k8s-3dcontexts:- context: cluster: k8s-3d user: kube-proxy name: defaultcurrent-context: defaultkind: Configpreferences: {}users:- name: kube-proxy user: client-certificate: /etc/k8s/ssl/kube-proxy_client。crt client-key: /etc/k8s/ssl/kube-proxy_client。key

注:這裡沒有和kubelet公用證書,而是使用openssl單獨生成的kube-proxu_client的客戶端證書和秘鑰

注:啟動會立馬停掉。原因是需要在master節點為kube-apiserver等設定ca證書進行安全驗證之後才能正常訪問。所以需要設定好證書後再使用

附;數字證書建立

一。配置master節點

1。openssl命令執行

[root@localhost ~]# mkdir /etc/k8s/ssl[root@localhost ~]# cd /etc/k8s/ssl[root@localhost ssl]# openssl genrsa -out ca。key 2048Generating RSA private key, 2048 bit long modulus…………。。+++…………………………………………。。+++e is 65537 (0x10001)[root@localhost ssl]# date2020年 08月 14日 星期五 23:42:47 CST[root@localhost ssl]# openssl req -x509 -new -nodes -key ca。key -subj “/CN=k8s-master” -days 5000 -out ca。crt[root@localhost ssl]# openssl genrsa -out server。key 2048Generating RSA private key, 2048 bit long modulus。。。。。+++…………。。。。。+++e is 65537 (0x10001)[root@localhost ssl]# lsca。crt ca。key server。key

2。建立master_ssl。cnf

vim master_ssl。cnf [req]req_extensions = v3_reqdistinguished_name = req_distinguished_name[req_distinguished_name][ v3_req ]basicConstraints = CA:FALSEkeyUsage = nonRepudiation, digitalSignature, keyEnciphermentsubjectAltName = @alt_names[alt_names]DNS。1 = kubernetesDNS。2 = kubernetes。defaultDNS。3 = kubernetes。default。svcDNS。4 = kubernetes。default。svc。cluster。localDNS。5 = k8s_masterIP。1 = 169。169。0。1 # ClusterIP 地址IP。2 = 192。168。0。200 # master IP地址

生成伺服器證書

[root@localhost ssl]# openssl req -new -key server。key -subj “/CN=k8s-master” -config master_ssl。cnf -out server。csr[root@localhost ssl]# openssl x509 -req -in server。csr -CA ca。crt -CAkey ca。key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl。cnf -out server。crtSignature oksubject=/CN=k8s-masterGetting CA Private Key[root@localhost ssl]#

生成客戶端證書,私鑰和啟動引數

openssl genrsa -out cs_client。key 2048 openssl req -new -key cs_client。key -subj “/CN=k8s-master” -out cs_client。csr openssl x509 -req -in cs_client。csr -CA ca。crt -CAkey ca。key -CAcreateserial -out cs_client。crt -days 5000

非常需要注意一點:

/CN=k8s-master 表示的伺服器名稱 ,我的是k8s-master。這裡如果沒設定伺服器名稱,需要到hosts檔案中設定。192.168.0.200 是區域網地址,如果不配置的話,可能會造成啟停失敗,原因是會讀到公網或者閘道器地址上去,造成不穩定

vi /etc/hosts k8s-master 192。168。0。200

二。node節點

1。負責master節點根證到node節點,以便在node節點生成服務證書和客戶端證書

# 192。168。0。201 是node節點1。其他節點同理scp 。/ssl/ca。crt 192。168。0。201:/etc/k8s/ssl/scp 。/ssl/ca。key 192。168。0。201:/etc/k8s/ssl/

2。登入 192。168。0。201 node節點伺服器

並執行命令:

openssl genrsa -out kubelet_client。key 2048 openssl req -new -key kubelet_client。key -subj “/CN=k8s-node-1” -out kubelet_client。csr openssl x509 -req -in kubelet_client。csr -CA ca。crt -CAkey ca。key -CAcreateserial -out kubelet_client。crt -days 5000

https://blog。csdn。net/yjf2013/article/details/80636475