kubernetes 編譯安裝 no.3

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

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章