kubernetes集群(k8s)二進制安裝(centos7環境)
1.環境準備與規劃
? 本文使用的centos7,docker 1.13.1
1.1 k8s,etcd下載
k8s版本:1.12.1,點擊下載

etcd-v版本3.3.10,點擊下載

1.2虛擬機設定master和node節點
?
| 角色 | ip | 組件安裝 |
|---|---|---|
| master | 192.168.100.100 | etcd、kube-apiserver、kube-controller-manager、 kube-scheduler、docker |
| node01 | 192.168.100.101 | kube-proxy、kubelet、docker |
| node02 | 192.168.100.102 | kube-proxy、kubelet、docker |
2.三臺機器操作
2.1關閉防火墻,更新yum
#關閉CentOS防火墻
systemctl disable firewalld
systemctl stop firewalld
##更新yum
yum -y update
# 安裝Docker( 引數-y 默認安裝時 自動選擇Y)
yum -y install docker
#啟動docker
service docker start
#要求服務器重啟自動啟動docker 可輸入該命令systemctl enable docker 實作
#創建改目錄,將k8s相關檔案都放在這里
mkdir /var/local/k8s
cd /var/local/k8s
2.2如果出現問題可以查看系統日志命令:tail -f /var/log/messages或者journalctl -f -u serviceName
3.master安裝
上傳etcd-v3.3.23-linux-amd64.tar.gz kubernetes-server-linux-amd64.tar.gz到k8s目錄
3.1 etcd服務
#解壓etcd
tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz
#進入目錄 etcd-v3.3.23-linux-amd64 目錄 并且將etcd和etcdctl檔案復制到/usr/bin目錄
cd etcd-v3.3.10-linux-amd64
cp etcd etcdctl /usr/bin/
3.1.1 配置etcd.service
#配置systemd服務檔案
vi /usr/lib/systemd/system/etcd.service
#添加如下內容
[Unit]
Description=Etcd Server
[Service]
Type=notify
TimeoutStartSec=0
Restart=always
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
[Install]
WantedBy=multi-user.target
3.1.2創建組態檔
mkdir -p /var/lib/etcd/
mkdir -p /var/lib/etcd/
vi /etc/etcd/etcd.conf
ETCD_NAME=ETCD Server
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"
3.1.3 啟動與測驗etcd服務
#重新加載服務的組態檔
systemctl daemon-reload
#添加開機自啟動
systemctl enable etcd.service
systemctl start etcd.service
systemctl status etcd.service
[root@localhost ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
cluster is healthy
etcd 到這里就搭建完成了
執行下面操作前,先解壓kubernetes-server-linux-amd64.tar.gz
tar -zxvf kubernetes-server-linux-amd64.tar.gz
#進入 解壓后將kube-apiserver、kube-controller-manager、kube-scheduler以及管理要使用的kubectl二進制命令檔案
cd kubernetes/server/bin/
cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/bin/
3.2 kube-apiserver服務 搭建
#編輯systemd服務檔案
vi /usr/lib/systemd/system/kube-apiserver.service
#添加如下內容
[Unit]
Description=Kubernetes API Server
After=etcd.service
Wants=etcd.service
[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver \
$KUBE_ETCD_SERVERS \
$KUBE_API_ADDRESS \
$KUBE_API_PORT \
$KUBE_SERVICE_ADDRESSES \
$KUBE_ADMISSION_CONTROL \
$KUBE_API_LOG \
$KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
添加apiservice的組態檔
mkdir /etc/kubernetes
vi /etc/kubernetes/apiserver
#添加如下內容
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--insecure-port=8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=192.168.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_API_LOG="--logtostderr=false --log-dir=/var/log/kubernets/apiserver --v=2"
KUBE_API_ARGS=" "
3.2.1 測驗kube-apiserver環境配置
systemctl daemon-reload
systemctl start kube-apiserver.service
#加入開機自啟動
systemctl enable kube-apiserver.service
# systemctl status kube-apiserver.service
● kube-apiserver.service - Kubernetes API Server
Loaded: loaded (/usr/lib/systemd/system/kube-apiserver.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2021-01-13 13:42:06 CST; 14min ago
Main PID: 1577 (kube-apiserver)
3.3 kube-controller-manager服務 搭建
kube-controller-manager服務依賴于kube-apiserver服務
配置systemd服務檔案:vi /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager \
$KUBE_MASTER \
$KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
組態檔 vi /etc/kubernetes/controller-manager
KUBE_MASTER="--master=http://127.0.0.1:8080"
KUBE_CONTROLLER_MANAGER_ARGS=" "
3.3.1 測驗 kube-controller-manager環境搭建
systemctl daemon-reload
systemctl start kube-controller-manager.service
#同上出現 running 就說明搭建成功
systemctl status kube-controller-manager.service
#加入開機自啟動
systemctl enable kube-controller-manager.service
3.4 kube-scheduler服務
kube-scheduler服務也依賴于kube-apiserver服務,
配置systemd服務檔案:vi /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
User=root
EnvironmentFile=-/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler \
$KUBE_MASTER \
$KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
組態檔:vi /etc/kubernetes/scheduler
KUBE_MASTER="--master=http://127.0.0.1:8080"
KUBE_SCHEDULER_ARGS="--logtostderr=true --log-dir=/var/log/kubernetes/scheduler --v=2"
3.5統一開機自啟測驗命令
#完成以上配置后,按順序啟動服務
systemctl daemon-reload
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl start kube-controller-manager.service
systemctl enable kube-scheduler.service
systemctl start kube-scheduler.service
#檢查每個服務的健康狀態:
systemctl status kube-apiserver.service
systemctl status kube-controller-manager.service
systemctl status kube-scheduler.service
3.6.健康查看
#查看主鍵狀態
[root@localhost ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
4.node安裝
4.1環境準備
Node節點上安裝組件有:
- docker(之前已經在機器上面部署了docker,不知情可查看2.1步驟)
- kube-proxy
- kubelet
這里可以選擇下載kubernetes-node-linux-amd64.tar.gz,也可以用直接的kubernetes-server-linux-amd64.tar.gz,
server里面包含了 node節點需要的東西(這里使用 kubernetes-node-linux-amd64.tar.gz操作)

#切換到該目錄并且上傳node包
cd /var/local/k8s
#解壓
tar -zxvf kubernetes-node-linux-amd64.tar.gz
cd kubernetes/node/bin
#復制kubelet kube-proxy放到/usr/bin目錄中
cp kubelet kube-proxy /usr/bin/
4.2kube-proxy安裝
vi /usr/lib/systemd/system/kube-proxy.service
[Unit] Description=Kubernetes Kube-Proxy Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.target [Service] EnvironmentFile=/etc/kubernetes/config EnvironmentFile=/etc/kubernetes/proxy ExecStart=/usr/bin/kube-proxy \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBE_MASTER \ $KUBE_PROXY_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
創建配置目錄,并添加組態檔
mkdir -p /etc/kubernetes vi /etc/kubernetes/proxy #添加如下內容 KUBE_PROXY_ARGS="" vi /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow_privileged=false"
#指定你的master地址
KUBE_MASTER="--master=http://192.168.100.100:8080"
4.2.1 proxy驗證
# systemctl daemon-reload
# systemctl start kube-proxy
# netstat -lntp | grep kube-proxy
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 8954/kube-proxy
tcp6 0 0 :::10256 :::* LISTEN 8954/kube-proxy
4.4 kubelet安裝
vi /usr/lib/systemd/system/kubelet.service
[Unit] Description=Kubernetes Kubelet Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=docker.service Requires=docker.service [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=/etc/kubernetes/kubelet ExecStart=/usr/bin/kubelet $KUBELET_ARGS Restart=on-failure KillMode=process [Install] WantedBy=multi-user.target
mkdir -p /var/lib/kubelet
vi /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0" #你的nodeip,這里填寫本機ip KUBELET_HOSTNAME="--hostname-override=192.168.100.101" #你的masterIp KUBELET_API_SERVER="--api-servers=http://192.168.100.100:8080" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=reg.docker.tb/harbor/pod-infrastructure:latest" KUBELET_ARGS=" --cluster-dns=192.168.100.101 --cluster-domain=cluster.node1 --enable-server=true --feature-gates=AttachVolumeLimit=false --enable-debugging-handlers=true --fail-swap-on=false --kubeconfig=/var/lib/kubelet/kubeconfig"
創建組態檔
vi /var/lib/kubelet/kubeconfig向master進行注冊
apiVersion: v1 kind: Config users: - name: kubelet clusters: - name: kubernetes cluster: server: http://192.168.100.100:8080 #你的masterIp contexts: - context: cluster: kubernetes user: kubelet name: service-account-context current-context: service-account-context
4.5 節點效驗
systemctl daemon-reload
systemctl start kubelet.service
# netstat -tnlp | grep kubelet ##正常情況應該出現,如果沒有出現請查看 5步驟
tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 9812/kubelet
tcp 0 0 127.0.0.1:44458 0.0.0.0:* LISTEN 9812/kubelet
tcp6 0 0 :::10255 :::* LISTEN 9812/kubelet
tcp6 0 0 :::10250 :::* LISTEN 9812/kubelet
#然后將kubelet丶kube-proxy加入開機自動啟動
systemctl daemon-reload
systemctl enable kubelet
systemctl start kubelet
systemctl status kubelet
systemctl enable kube-proxy
systemctl start kube-proxy
systemctl status kube-proxy
5.node注冊不成功問題
# tail -f /var/log/messages Jan 13 14:04:19 localhost kubelet: F0113 14:04:19.645151 9505 server.go:262] failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
如果出現上述問題,問題原因在于 kubelet 的cgroup 與 docker 的不符合,解決方法如下
-
vi /usr/lib/systemd/system/kubelet.service
[Unit] Description=Kubernetes Kubelet Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=docker.service Requires=docker.service [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=/etc/kubernetes/kubelet ExecStart=/usr/bin/kubelet --cgroup-driver=systemd --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice $KUBELET_ARGS Restart=on-failure KillMode=process [Install] WantedBy=multi-user.target
- 然后重新執行4.5步驟
6.查看master是否獲取到node節點
[root@localhost ~]# kubectl get node NAME STATUS ROLES AGE VERSION localhost.localdomain Ready <none> 2m25s v1.12.1
到這里就全部完成了,其他node安裝相同的方式搭建,或者復制node虛擬機修改/etc/kubernetes/kubelet里面的本機Ip
localhost.localdomain 為本機名字,修改命令為: hostnamectl set-hostname yourName
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/248575.html
標籤:其他
上一篇:Webpack 中的 TreeShaking 是什么?
下一篇:windous注冊表的作用

