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

 

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