二進制文件安裝 Kubernetes v1.3.0

安裝 kubernetes 的三種方法

  • 利用包管理工具安裝:如 yum, apt 等
  • 在 github 上的 Kubernetes 項目頁下載編譯好的二進制包
  • 下載源碼而後編譯安裝

這裏用第二種方法來安裝一下 Kubernetes。node

各組件的版本

組件 版本 備註
Kubernetes 1.3.0 從 github 上下載的
Docker 1.13.1 centos 7 上用 yum 安裝
etcd 3.0 下載二進制文件安裝

下載頁面:https://github.com/kubernetes/kubernetes/releases?after=v1.3.1linux

下載地址:https://github.com/kubernetes/kubernetes/releases/download/v1.3.0/kubernetes.tar.gzgit

壓縮包 kubernetes.tar.gz 內包含了 Kubernetes 的服務程序文件、文檔和示例。github

解壓縮以後,server 子目錄中的 kubernetes-server-linux-amd64.tar.gz 文件包含了 Kubernetes 須要運行的所有服務程序文件。docker

文件名 說明
hyperkube 總控程序,用於運行其餘 Kubernetes 程序
kube-apiserver apiserver 主程序
kube-apiserver.docker_tag apiserver docker 鏡像的 tag
kube-apiserver.tar apiserver docker 鏡像文件
kube-controller-manager controller-manager 主程序
kube-controller-manager.docker_tag controller-manager docker 鏡像的 tag
kube-controller-manager.tar controller-manager docker 鏡像文件
kubectl 客戶端命令工具
kubelet kubelet 主程序
kube-proxy proxy 主程序
kube-scheduler scheduler 主程序
kube-scheduler.docker_tag scheduler docker 鏡像的 tag
kube-scheduler.tar scheduler docker 鏡像文件

Master 和 Node 節點上須要安裝的程序

節點 須要安裝的程序
Kubernetes Master etcd、kube-apiserver、kube-controller-manager、kube-scheduler
Kubernetes Node kubelet、kube-proxy

Kubernetes 還提供了一個「all-in-one」的 hyperkube 程序來完成對以上服務程序的啓動。數據庫

關閉防火牆

因爲是實驗階段,能夠直接把防火牆給關了,這樣的話能夠避免不少意想不到的困難。centos

# 禁用虛擬機
systemctl disable firewalld
# 關閉防火牆
systemctl stop firewalld

Master 上的 etcd、kube-apiserver、kube-controller-manager、kube-scheduler 服務

將 Kubernetes 的可執行文件複製到 /user/bin,若是複製到其餘目錄,則將 systemd 服務文件中的文件路徑修改正確便可。api

etcd 服務

etcd 服務做爲 Kubernetes 集羣的主數據庫,在安裝 Kubernetes 個服務以前須要首先安裝和啓動。安全

從 GitHub 官網下載 etcd 發佈的二進制文件,將 etcd 和 etcdctl 文件複製到 /usr/bin 目錄bash

systemd 服務文件 /usr/lib/systemd/system/etcd.service:

etcd 下載頁面:https://github.com/etcd-io/etcd/releases?after=v3.0.1

etcd 下載地址:https://github.com/etcd-io/etcd/releases/download/v3.0.0/etcd-v3.0.0-linux-amd64.tar.gz

# 下載 etcd 的二進制文件
wget https://github.com/etcd-io/etcd/releases/download/v3.0.0/etcd-v3.0.0-linux-amd64.tar.gz
# 解壓
tar zxvf etcd-v3.0.0-linux-amd64.tar.gz
# 將etcd和 etcdctl 複製到 /usr/bin 目錄
mv etcd etcdctl /usr/bin
# 建立 systemd 服務文件

systemd 服務文件 /usr/lib/systemd/system/etcd.service

[Unit]
Description=Etcd Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd

[Install]
WantedBy=multi-user.target
  • WorkingDirectory(/var/lib/etcd) 表示etcd 數據保存的目錄, 須要在 etcd 服務啓動前進行建立
  • 配置文件 /etc/etcd/etcd/conf 一般不須要特別的參數配置
  • etcd 監聽地址默認是 http://127.0.0.1:2379
# 建立 etcd 的數據目錄
mkdir /var/lib/etcd

# 加入到開機列表並啓動服務
systemctl daemon-reload
systemctl enable etcd.service
systemctl start etcd.service

# 驗證是否啓動正確
etcdctl cluster-health

[root@localhost ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
cluster is healthy

到這一階段 etcd 已經裝好了

kube-apiserver 服務

先下載好對應的版本呢,而後解壓,把這幾個複製到 /usr/bin 下

mv kube-apiserver kube-controller-manager kube-scheduler /usr/bin

將 kube-apiserver 的可執行文件複製到 /usr/bin 目錄,編輯systemd 服務文件 /usr/lib/systemd/system/kube-apiserver.service,內容以下:

Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=etcd.service
Wants=etcd.service

[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置文件 /etc/kubernetes/apiserver 的內容包括了 kube-apiserver 的所有啓動參數,主要的配置參數在變量 KUBE_API_ARGS 中指定

cat /etc/kubernetes/apiserver
KUBE_API_ARGS="--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,SecurityContextDeny,ServiceAccount,ResourceQuota --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

啓動參數說明

kube-controller-manager 服務

cat /usr/lib/systemd/system/kube-controller-manager.server

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

配置文件/etc/kubernetes/controller-manager 的內容包括了 kube-controller-manager 的所有啓動參數,主要的配置參數在變量 KUBE_CONTROLLER_MANAGER_ARGS 中指定。

# cat /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=http:192.168.18.3:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

kube-scheduler 服務

kube-scheduler 服務也依賴於 kube-apiserver 服務

cat /usr/lib/systemd/system/kube-scheduler.service

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kbue-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置文件 /etc/kubernetes/scheduler 的內容包括了 kube-scheduler 的所有啓動參數,主要的配置參數在變量 KUBE_SCHEDULER_ARGS 中指定

cat /etc/kubernetes/scheduler

KUBE_SCHEDULER_ARGS="--master=http://192.168.18.3:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
#systemctl start 命令啓動這三個服務
#systemctl enable 將服務加入開機啓動


systemctl daemon-reload
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
systemctl enable kube-scheduler
systemctl start kube-scheduler

# systemctl status <service_name> 來驗證服務的啓動狀態
# running 表示啓動成功

至此 Master 上的服務就所有啓動完成了,嗯,有啥問題多看看日誌啥的

Node 上的 kubelet、kube-proxy服務

在Node 節點上須要預先安裝好 Docker Daemon,而且正常啓動。

kubelet 服務

kubelet 服務依賴於 Docker 服務

cat /usr/lib/systemd/system/kubelet.service

[Unit]
Description=Kubernetes Kubelete 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

[Install]
WantedBy=multi-user.target

WorkingDirectory 表示 kubelet 保存數據的目錄,須要在 kubelet 啓動以前建立。

配置文件 /etc/kubernetes/kubelet 的內容包括了 kubelet 的所有啓動參數

cat /etc/kubernetes/kubelet

KUBELET_ARGS="--api-server=http://192.168.12.201:8080 --hostname-override=192.168.12.201 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

啓動參數的說明以下

kube-proxy 服務

kube-proxy 服務依賴於 network 服務

[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.service
Requires=network.service

[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

配置文件 /etc/kubernetes/proxy 的內容包括了 kube-proxy 的所有啓動參數

cat /etc/kubernetes/proxy

KUBE_PROXY_ARGS="--master=http://192.168.12.200:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

kubelet 和 kube-proxy 服務的啓動命令

systemctl daemon-reload
systemctl enable kubelet.service
systemctl start kubelet.service
systemctl enable kube-proxy
systemctl start kube-proxy
mv kubelet kube-proxy /usr/bin

Kubernetes 集羣的安全設置

1. 基於 CA 簽名的雙向數字證書認證方式

若是隻是在內網環境中, Kubernetes 的各個組件與 Master 之間能夠經過 apiserver 的非安全端口 http://apiserver:8080 進行訪問。若是 apiserver 須要對外提供服務,或者集羣中的某些容器也要經過 apiserver 以獲取集羣中的某些信息,則更安全的作法是啓用 HTTPS 安全機制。

Kubernetes 提供了:

  • 基於 CA 簽名的雙向數字證書認證
  • 基於 HTTP BASE 或者 TOKEN 的認證方式

其中 CA 的安全性更高。

2. 基於 HTTP BASE 或 TOKEN 的簡單認證方式

Kubernetes 的版本升級

Kubernetes 的版本升級須要考慮到當前集羣中正在運行的容器不受影響。應對集羣中的各個Node 逐個進行隔離,而後等待在其上運行的容器所有執行完成,再更新該 Node 上的 kubelet 和 kube-proxy 服務,將所有 Node 都更新完後,最後更新 Master 服務。

  • 經過官網獲取最新的二進制包 kubernetes.tar.gz,解壓後提取二進制文件
  • 逐個隔離Node,等待在其上運行的服務所有容器工做完成,更新 kubelet 和 kube-proxy 服務文件,而後重啓這兩個服務
  • 更新 Master 的 kube-apiserver、kube-controller-manager、kube-scheduler 服務文件並重啓

內網中的 Kubernetes 配置

其實就是由於不少狀況下內網都不能訪問 Internete 因此也就不能拉取鏡像,就要配置一個私有的鏡像倉庫

相關文章
相關標籤/搜索