這裏用第二種方法來安裝一下 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 鏡像文件 |
節點 | 須要安裝的程序 |
---|---|
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
將 Kubernetes 的可執行文件複製到 /user/bin,若是複製到其餘目錄,則將 systemd 服務文件中的文件路徑修改正確便可。api
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
# 建立 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 已經裝好了
先下載好對應的版本呢,而後解壓,把這幾個複製到 /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"
啓動參數說明
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-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 節點上須要預先安裝好 Docker Daemon,而且正常啓動。
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 服務依賴於 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 的各個組件與 Master 之間能夠經過 apiserver 的非安全端口 http://apiserver:8080 進行訪問。若是 apiserver 須要對外提供服務,或者集羣中的某些容器也要經過 apiserver 以獲取集羣中的某些信息,則更安全的作法是啓用 HTTPS 安全機制。
Kubernetes 提供了:
其中 CA 的安全性更高。
Kubernetes 的版本升級須要考慮到當前集羣中正在運行的容器不受影響。應對集羣中的各個Node 逐個進行隔離,而後等待在其上運行的容器所有執行完成,再更新該 Node 上的 kubelet 和 kube-proxy 服務,將所有 Node 都更新完後,最後更新 Master 服務。
其實就是由於不少狀況下內網都不能訪問 Internete 因此也就不能拉取鏡像,就要配置一個私有的鏡像倉庫