1.kubernetes 安裝配置
1.1 安裝kubernetes
Kubernetes系統由一組可只從程序組成,用戶可以通過Github的Kubernetes項目頁下載編譯好的二進制包,或者下載源代碼後進行安裝。
最簡單的方法:
yum install kubernetes
但需要修改各組件的啓動參數才能完成kubernetes集羣的配置
1.1.1 二進制安裝
下載地址:
https://github.com/kubernetes/kubernetes/releases
解壓縮後,server 子目錄中的 kubernetes-manifests.tar.gz文件中包含了Kubernetes需要運行的全部服務程序文件,列表如圖
kubernetes master 節點安裝部署etcd,kube-apiserver,kube-controller-manager,kube-scheduler服務進程。我們使用kubectl作爲客戶端與Master進行交互操作,在工作Node上僅需部署Kubelet和kube-proxy服務進程。Kubernetes還提供了一個“all-in-one”的hyperkube進程來完成對以上服務程序的啓動。
1.2 配置和啓動Kubernetes服務
kubernetes的服務都可以通過直接運行二進制文件加上啓動參數完成,爲了便於管理,常見的作法是將Kubernetes服務程序配置爲Linux的系統開機自動啓動的服務。
centos 7 默認啓動了firewalld-----防火牆服務(關閉)
systemctl disable firewalld
systemctl stop firewalld
將Kubernetes 的可執行文件複製到/usr/bin (如果複製到其他目錄,則將systemd服務文件中的文件路徑修改正確即可),然後對服務進行配置
1.1. Master 上的etcd,kube-apiserver,kube-controller-manager,kube-scheduler服務
1) etcd服務
etcd下載地址
wget https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz
將etcd和etcdtl文件複製到/usr/bin/目錄
etcd服務作爲Kubernetes集羣的主數據庫,在安裝Kubernetes各服務之前需要首先安裝和啓動。
vim /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地址供客戶端鏈接
配置完成後,通過systemctl start 命令啓動etcd服務,同時,使用systemctl enable 命令將服務加入開機啓動列表中
systemctl daemon-reload
systemctl enable etcd.service
systemctl start etcd.service
通過指定etcdctl cluster-health,可以驗證etcd是否正確啓動:
[root@kubernetes ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
cluster is healthy
1.1) 配置安裝
cat /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\""
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
cat /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.53:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.53:2379"
2)kube-apiserver服務
將kube-apiserver的可執行文件複製到/usr/bin 目錄。
編輯systemd服務文件/usr/lib/systemd/system/kube-apiserver.service,內容如下
[Unit]
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"
啓動參數說明如下:
--etcd_servers: 指定etcd服務的URL
--insecure-bind-address: apiserver綁定主機的非安全IP地址,設置0.0.0.0表示綁定所有IP地址
--insecure-port: apiserver綁定主機的非安全端口號,默認爲8080.
--service-cluster-ip-range: Kubernetes集羣中Service的虛擬IP地址段範圍,以CIDR格式表示,例如169.168.0.0/16,該IP範圍不能與物理機的真實IP有重合
--service-node-port-range: Kubernetes 集羣中Service可映射的物理機端口號範圍,默認爲30000~32767
--admission_control: Kubernetes 集羣的準人控制設置,各控制模塊以插件的形式依次生效。
--logtostderr: 設置爲false表示將日誌寫入文件,不寫入stderr.
--log-dir: 日誌目錄。
-v: 日誌級別
3)kube-controller-manager 服務
kube-controller-manager服務依賴於kube-apiderver服務。
cat /usr/lib/systemd/system/kube-controller-manager.service
[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=onfailure
LimitNOFILE=65536
[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.1.53:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
啓動參數如下:
master: 指定apiserver的URL地址
logtostderr: 設置爲false表示將日誌寫入文件,不寫入stderr
log-dir: 日誌目錄。
v: 日誌級別
4)kube-scheduler服務
kube-scheduler服務也依賴於kube-apiserver服務
cat /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-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.1.53:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
啓動參數
master: 指定apiserver的URL地址
logtostderr: 設置爲false表示將日誌寫入文件,不寫入stderr.
log-dir: 日誌目錄
v: 日誌級別
配置完成後,執行systemctl start 命令按順序啓動這3個服務。同時使用systemctl enable 命令將服務加入開機啓動列表中
啓動
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-schesuler
systemctl status kube-apiserver.service
通過systemctl status 來驗證服務的啓動狀態
Master上所需的服務全部啓動完成!!!
1.2. Node上的kubelet,kube-proxy 服務
在node節點上需要預先安裝好Docker Daemon 並且正常啓動
1)kubelet服務
kubelet 服務依賴於Docker服務
cat /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
[Install]
WantedBy=multi-user.target
其中WorkingDirectory表示kubelet保存數據的目錄,需要在啓動kubelet服務之前創建
配置文件/etc/kubernetes/kubelet的內容包括了kubelet的全部啓動參數,主要的配置參數在變量KUBELET_ARGS中指定。
cat /etc/kubernetes/kubelet
KUBELET_ARGS="--api-servers=http://192.168.1.53:8080 --hostname-override=192.168.1.53 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
參數如下:
api-servers: 指定apiserver的URL地址,可以指定多個。
hostname-override 設置本Node的名稱
logtostderr: 設置爲false表示將日誌寫入文件, 不寫入stderr
log-dir: 日誌目錄
v: 日誌級別
2) kube-proxy服務
kube-proxy服務依賴於network服務
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
Requires=network.service
[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
配置文件/etc/kubernetes/proxy的內容包括了kube-proxy的全部啓動參數主要的配置參數在變量KUBE_PROXY_ARGS中指定。
KUBE_PROXY_ARGS="--master=http://192.168.1.53:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
啓動參數如下:
master: 指定apiserver的url地址
logtostderr: 設置爲false表示將日誌寫入文件,不寫入stderr
log-dir: 日誌目錄
v: 日誌級別
啓動kubelet和kube-proxy服務
systemctl daemon-reload
systemctl enable kubelet.service
systemctl start kubelet.service
systemctl enable kube-proxy
systemctl status kube-proxy
kubelet默認採用想Master自動註冊本Node的機制,在Master上查看各Node的狀態,狀態爲Ready表示Node已經成功註冊並且狀態爲可用
# kubectl get nodes
NAME STATUS AGE
192.168.1.53 Ready 1h
等所有Node的狀態都爲Ready之後,一個Kubernetes集羣就啓動完成了,接下來就可以創建Pod,RC,Service等資源對象來部署Docker容器應用
1.3 Kubernetes 集羣的安全設置
1. 基於CA簽名的雙向數字證書認證方式
在一個安全的內網環境中,Kubernetes的各個組件與Master之間可以通過apiserver的非安全端口http://apiserver:8080進行訪問,但如果apiserver需要對外提供服務,或者集羣中的某些容器也需要訪問piserver以獲取急羣衆的某些消息,則更安全的做法是啓用HTTPS安全機制。Kubernetes提供了基於CA簽名的雙向數字證書認證方式和簡單的基於HTTP BASE或TOKEN的認證方式,其中CA證書方式的安全性最高。故使用CA證書的方式配置Kubernetes集羣,要求Master上的kube-apiserver,kube-controller-manager,kube-scheduler進程及各Node上的kubelet,kube-proxy進程進行CA簽名雙向數字證書安全設置。
基於CA簽名的雙向數字贈書的生成過程如下:
(1)爲kube-apiserver生成一個數字證書,並用CA證書進行簽名。
(2)爲kube-apiserver進程配置證書相關的啓動參數,包括CA證書(用於驗證客戶端證書的簽名真僞),自己的經過CA簽名後的證書及私鑰
(3)爲每個訪問Kubernetes API Server的客戶端(如kube-controller-manager,kube-scheduler,kubelet,kube-proxy及調用API Server的客戶端程序kubectl等)進程生成自己的數字證書,也都用CA證書進行簽名,在相關程序的啓動參數裏增加CA證書,自己的證書等相關參數
1)設置kube-apiserver的CA證書相關的文件和啓動參數
使用OpenSSL工具在Master服務器上創建CA證書和私鑰相關的文件
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=yourcompany.com" -days 5000 -out ca.crt
openssl genrsa -out server.key 2048
注意:生成ca.crt時,-subj參數中“/CN”的值通常爲域名
準備master_ssl.cnf文件,該文件用於x509 v3版本的證書,在該文件中主要需要配置Master 服務器的hostname(k8s-master),IP地址(192.168.1.53),以及Kubernetes Master Service的虛擬服務器名稱(kubernetes.default等)和該虛擬服務的ClusterIPd地址(169.169.0.1)
master_ssl.cnf文件的示例如下:
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = kubernetes
IP.1 = 169.169.0.1
IP.2 = 192.168.1.53
基於master_ssl.cnf創建server.csr和server.ert文件,在生成server.csr時,-subj參數中"/CN"指定的名字需爲Master所在的主機名。
openssl req -new -key server.key -subj "/CN=kubernetes" -config master_ssl.cnf -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.cnf -out server.crt
全部執行完後會生成6個文件:ca.crt, ca,key, ca.srl, server.crt, server.csr,server.key.
將這些文件複製到一個目錄中(例如:/var/lib/kubernetes/),然後設置kube-apiserver的三個啓動參數“--client-ca-file” "--tls-cert-file"和“--tls-private-key-file”,分別代表證書文件,服務端證書文件和服務端私鑰文件:
--client_ca_file=/var/run/kubernetes/ca.crt
--tls-private-key-file=/var/run/kubernetes/server.key
--tls-cert-file=/var/run/kubernetes/server.crt
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 --client_ca_file=/var/run/kubernetes/ca.crt --tls-private-key-file=/var/run/kubernetes/server.key --tls-cert-file=/var/run/kubernetes/server.crt --v=2"
同時,可以關掉非安全端口8080,設置安全端口爲443 (默認爲6443)
--insecure-port=0
--secure-port=443
如下:
KUBE_API_ARGS="--etcd_servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=0 --secure-port=443 --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 --client_ca_file=/var/run/kubernetes/ca.crt --tls-private-key-file=/var/run/kubernetes/server.key --tls-cert-file=/var/run/kubernetes/server.crt --v=2"
最後重啓kube-apiserver服務
2)設置kube-controller-manager的客戶端證書密鑰和啓動參數
openssl genrsa -out cs_client.key 2048
openssl req -new -key cs_client.key -subj "/CN=node" -out cs_client.csr
openssl x509 -req -in cs_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cs_client.crt -days 5000
其中,在生成cs_client.crt時,-CA 參數和-CAkey參數使用的是apiserver的ca.crt和ca.key文件將這些文件複製到一個目錄中(/var/run/kubernetes/)
接下來創建/etc/kubernetes/kubeconfig文件(kube-controller-manager與kube-scheduler公用),配置客戶端證書等相關參數,如下
apiVersion: v1
kind: Config
users:
- name: controllermanager
user:
client-certificate: /var/run/kubernetes/cs_client.crt
client-key: /var/run/kubernetes/cs_client.key
clusters:
- name: local
cluster:
certificate-authority: /var/run/kubernetes/ca.crt
contexts:
- contest:
cluster: local
user: controllermanager
name: my-context
current-contest: my-contest
然後設置kube-controller-manager服務的啓動參數,注意,--master的地址爲https安全地址,不適用非安全地址http://192.168.1.53:8080
--master=https://192.168.1.53:443
--service_account_private_key_file=/var/run/kubernetes/server.key
--root-ca-file=/var/run/kubernetes/ca.crt
--kubeconfig=/etc/kubernetes/kubeconfig
結果如下:
KUBE_CONTROLLER_MANAGER_ARGS="--master=https://192.168.1.53:443 --service_account_private_key_file=/var/run/kubernetes/server.key --root-ca-file=/var/run/kubernetes/ca.crt --kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
3)設置kube-scheduler啓動參數
kube-scheduler用kube-controller-manager創建的客戶端證書,配置啓動參數
--master=https://192.168.1.53
--kubeconfig=/etc/kubernetes/kubeconfig
KUBE_SCHEDULER_ARGS="--master=https://192.168.1.53:443 --kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
重啓kube-scheduler服務
4)設置每臺Node上kubelet的客戶端證書,私鑰和啓動參數
首先複製kube-apiserver的ca.crt和ca.key文件到Node上,在生成kubelet_client.crt時-CA參數和-CAkey參數使用的是apiserver的ca.crt和ca.key文件。在生成kubelet_client.csr時-subj 參數中的 "/CN" 設置爲本Node的IP地址
openssl genrsa -out kubelet_client.key 2048
openssl req -new -key kubelet_client.key -subj "/CN=192.168.1.51" -out kubelet_client.csr
openssl x509 -req -in kubelet_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kubelet_client.crt -days 5000
將這些文件複製到(/var/run/kubernetes/)
接下來創建/etc/kubernetes/kubeconfig文件(kubelet和kube-proxy進程共用),配置客戶端證書等相關參數,內容如下:
apiVersion: v1
kind: Config
users:
- name: kubelet
user:
client-certificate: /etc/kubernetes/ssl_keys/kubelet_client.crt
client-key: /etc/kubernetes/ssl_keys/kubelet_client.key
clusters:
- name: local
cluster:
certificate-authority: /etc/kubernetes/ssl_keys/ca.crt
contexts:
- context:
cluster: local
user: kubelet
name: my-context
corrent-context: my-context
設置kubelet服務啓動參數
KUBELET_ARGS="--api-servers=https://192.168.1.53:443 --kubeconfig=/etc/kubelet/kubeconfig --hostname-override=192.168.1.53 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
重啓kubelet
5) 設置kube-proxy的啓動參數
kube-procy 複用上一步kubelet創建的客戶端證書,配置啓動參數
--master=https://192.168.1.53:443
--kubeconfig=/etc/kubernetes/kubeconfig
結果
KUBE_PROXY_ARGS="--master=https://192.168.1.53:443 --kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
重啓kube-proxy服務
至此,一個基於CA的雙向數字證書認證的Kubernetes集羣環境搭建完成了
6)設置kubect客戶端使用安全方式訪問apiserver
使用kubectl對Kubernetes集羣進行操作時,默認使用非安全端口8080對apiserver進行訪問,也可以設置爲安全訪問apiserver的模式,需要設置3個證書相關參數 “--certificate-authority” "--client-certificate"和 “--client-key”,分別表示用於CA授權的證書,客戶端證書和客戶端密鑰
--certificate-authority: #使用kube-apiserver生成ca.crt文件
--client-certificate: #使用kube-controller-manager生成cs_client.crt文件。
--client-key: #使用爲kube-controller-manager生成cs_client.key文件
同時,指定apiserver的URL的地址爲HTTPS安全地址(如:https://kubernetes-master:443),最後輸入需要執行的子命令,即可對apiserver進行安全訪問:
kubectl --server=https://192.168.1.53:443 --certificate-authority=/etc/kubernetes/ssl_keys/ca.crt --client-certificate=/etc/kubernetes/ssl_keys/cs_client.crt --client-key=/etc/kubernetes/ssl_keys/cs_client.key get node
NAME STATUS AGE
192.168.1.53 Ready 5d
2. 基於HTTP BASE或TOKEN的簡單認證方式
除了基於CA的雙向數字證書認證方式,Kubernetes也提供了基於HTTP BASE或TOKEN的簡單認證方式,各組件與apiserver之間的通信方式仍採用HTTPS,但不使用CA數字證書
採用基於HTTP BASE或TOKEN的簡單認證方式時,API Server 對外暴露HTTPS端口,客戶端提供用戶名,密碼或Toker來完成認證過程。需要說明的是,kubectl 命令行工具比較特殊,它同事支持CA雙向認證與簡單認證兩種模式與apiserver通信,其他客戶端組件只能配置爲雙向安全認證或非安全模式與apiserver通信。
基於HTTP BASE 認證的配置過程如下。
(1)創建包括用戶名,密碼和UID的文件basic_auth_file,放置在合適的目錄中,例如/etc/kubernetes目錄。需要注意的是這是一個純文本文件,用戶名,密碼都是明文。
vim /etc/kubernetes/basic_auth_file
admin,admin,1
system,system,2
(2)設置kube-apiserver 的啓動參數 “--basic_auth_file”,使用上述文件提供安全認證:
--secure-port=443
--basic_auth_file=/etc/kubernetes/basic_auth_file
然後重啓API Server服務
(3)使用kubectl通過指定的用戶名和密碼來訪問API Server:
kubectl --server=https://192.168.1.53:443 --username=admin --password=admin --insecure-skip-tls-verify=true get nodes
基於TOKEN認證的配置過程如下
(1)創建包括用戶名,密碼和UID的文件token_autha-file,放置在合適的目錄中,例如/etc/kubernetes目錄。需要注意的是,這是一個純文本文件,用戶名,密碼都是明文。
cat /etc/kubernetes/tocken_auth_file
admin,admin,1
system,system,2
(2)設置kube-apiserver的啓動參數"--token_auth_file",使用上述文件提供安全認證:
--secure-port=443
--token_auth_file=/etc/kubernetes/token_auth_file
然後,重啓API Server服務。
(3)用curl驗證和訪問API Server
[root@kubernetes ~]# curl -k --header "Authorization:Bearer admin" https://192.168.1.53:443/version
{
"major": "1",
"minor": "3",
"gitVersion": "v1.3.0",
"gitCommit": "283137936a498aed572ee22af6774b6fb6e9fd94",
"gitTreeState": "clean",
"buildDate": "2016-07-01T19:19:19Z",
"goVersion": "go1.6.2",
"compiler": "gc",
"platform": "linux/amd64"
1.4 kubernetes的版本升級
kubernetes的版本升級需要考慮到當前集羣中正在運行的容器不受影響。應對集羣中的個Node逐個進行隔離,然後等待在其上運行的容器全部執行完成,再更新該Node上的kubelet和kube-proxy服務,將全部Node都更新完成後,最後更新Master服務。
通過官網過去最新版本的二進制包kubernetes.tar.gz,解壓縮後提取服務二進制文件
逐個隔離Node,等待在其上運行的全部容器工作完成,更新kubelet和kube-proxy服務文件,然後重啓這兩個服務
更新Master的kube-apiserver,kube-controller-manager,kube-scheduler服務文件並重啓
3.kubernetes 相關配置
kubernetes在能夠訪問Internet網絡的環境中使用起來非常方便,一方面在docker.io和gcr.io網站中已經存在了大量官方製作的Docker鏡像
許多企業因爲安全原因無法訪問Internet,對於這些企業就需要通過創建一個內部的私有Docker Registry,並修改一些Kubernetes的配置,來啓動內網中的Kubernetes集羣。
1.1 Docker Private Registry(私有Docker鏡像庫)
使用 Docker 提供的Registry 鏡像創建一個私有鏡像倉庫
https://blog.csdn.net/wanchaopeng/article/details/88864588
1.2 kubelet 配置
由於在kubernetes 中是以Pod而不是Docker容器爲管理單元的,在kubelet創建Pod時,還通過啓動一個名爲google_containers/pause的鏡像來實現Pod的概念
每臺的Node的kubelet服務的啓動參數上--pod_infra_container_images 參數,指定爲私有Docker Registry中pause鏡像的地址。
cat /etc/kubernetes/kubelet
KUBELET_ARGS="--api-servers=https://192.168.1.53:8080 --hostname-override=192.168.1.53 --logtostderr=false --log-dir=/var/log/kubernetes --v=2 --pod_infra_container_image=google/pause:latest"
下載鏡像:
docker pull google/pause:latest
修改kubelet配置文件中的--pod_infra_container_images參數
--pod_infra_container_image=google/pause:latest
重啓kubelet服務
systemctl restart kubelet