Kubernetes实战(二十一)-kubernetes二进制文件方式部署集群(上)

Kubernetes 二进制部署方式是生产环境的主流搭建方式,已在生产环境验证,kubeadm也可以搭建生产环境,不过kubeadm应该还没有被大规模在生产环境验证,所以不推荐在生产环境使用,由于内容量大,扩展性强,我会将集群部署分为多个章节讲解。

本篇文章讲解 Master 节点上的 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、docker 服务的部署,当然如果你需要在 Master 节点上操作 Kubernetes 集群,则需要在 Master 节点上部署 kubelet、kube-proxy 服务(下一篇文章会介绍),本文不涉及高可用、安全、网络方面,这些内容会在后面的文章中介绍。

一、准备工作 

Centos-7.6,Kubernetes-v1.15.3,Docker-v19.03.12,Etcd-v3.3.24,服务器IP是10.125.31.81。

首先我们需要到Kubernetes官网找到已编译好的二进制文件,v1.15.3 传送门如下:

Kubernetes v1.15.3 二进制文件下载地址

我们主要下载以下几个组件,二进制文件资源列表如下:

kubernetes-client-linux-amd64.tar.gz
kubernetes-node-linux-amd64.tar.gz
kubernetes-server-linux-amd64.tar.gz

二进制文件资源,图示如下:

Kubernetes实战(二十一)-kubernetes二进制文件方式部署集群(上)_第1张图片

Kubernetes实战(二十一)-kubernetes二进制文件方式部署集群(上)_第2张图片

Kubernetes实战(二十一)-kubernetes二进制文件方式部署集群(上)_第3张图片

下载完成后上传到服务器目录下。

二、集群部署

Kubernetes 的主要服务程序都可以通过直接运行二进制文件加上启动参数完成。在 Kubernetes 的 Master 上需要部署 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、docker 服务进程。

在服务端解压 kubernetes-server-linux-amd64.tar.gz 文件,将 kube-apiserver、kube-controller-manager、kube-scheduler 可执行文件复制到 /usr/bin 目录下,然后在 /usr/lib/systemd/system 目录下为各个服务创建 systemd 服务配置文件,然后配置各个服务的启动参数。

1、docker部署

二进制 Kubernetes 集群的 docker 是 v19.03.12 版本,相关文章已经为各位客官准备好了(版本注意选择 v19.03.12),传送门如下:

Docker 环境搭建和配置

到此我们就在 Master 节点上部署了 docker 服务。

2、etcd部署

etcd 服务作为 Kubernetes 集群的主数据库,在安装 Kubernetes 各服务之前需要首先安装和启动。

从GitHub官网(https://github.com/etcd-io/etcd/releases)下载 etcd-v3.3.24 二进制文件,图示如下:

Kubernetes实战(二十一)-kubernetes二进制文件方式部署集群(上)_第4张图片

Kubernetes实战(二十一)-kubernetes二进制文件方式部署集群(上)_第5张图片

将 etcd-v3.3.24-linux-amd64.tar.gz 下载完成后解压到服务器,将 etcd 和 etcdctl 文件复制到 /usr/bin 目录。

设置 systemd 服务配置文件 /usr/lib/systemd/system/etcd.service,配置 etcd 服务:

[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
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
$ systemctl start etcd

通过执行 etcdctl cluster-health,可以验证 etcd 是否正确启动:

  $ etcdctl endpoint health

3、kube-apiserver 服务

将 kubernetes-server-linux-amd64.tar.gz 下载完后解压到服务器,把 kube-apiserver、kube-controller-manager 和 kube-scheduler 文件复制到 /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 中指定,/etc/kubernetes/apiserver 内容如下:

KUBE_API_ARGS="--etcd-servers=http://10.125.31.81: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 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSec
onds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=0"

对启动参数说明如下:

  • --etcd-service:指定 etcd 服务的URL。
  • --storage-backend:指定 etcd 的版本,在 Kubernetes 1.6开始,默认为 etcd 3。注意,在 Kubernetes 1.6之前的版本中没有这个参数,kube-apiserver 默认使用 etcd 2,对于正在运行的 1.5 或旧版本的 Kubernetes集群,etcd 提供了数据升级方案,详见 etcd 文档(https://etcd.io/)。
  • --insecure-bind-address:API Server 绑定主机的非安全 IP 地址,设置 0.0.0.0 标识绑定所有 IP 地址。
  • --insecure-port:API Server 绑定主机的非安全端口号,默认为 8080。
  • --service-cluster-ip-range:Kubernetes集群中 Service 的虚拟IP地址范围,以CIDDR格式标识,例如169.169.0.0/16,该IP范围不能与物理机的IP地址有重合。
  • --service-node-port-range:Kubernetes集群中Service可使用的物理机端口号,默认值为 30000~32767。
  • --enable-admission-plugins:Kubernetes集群的准入控制设置,各控制模块以插件的形式依次有效。
  • --logtostderr:设置为 false 表示将日志写入文件,不写入 stderr。
  • --log-dir:日志目录。
  • --v:日志级别。

4、kube-controller-manager服务

kube-controller-manager服务依赖与 kube-apiserver服务,设置systemd服务配置文件 /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=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置文件 /etc/kubernetes/controller-manager 的内容包含了 kube-controller-manager 的全部启动参数,主要的配置参数在 KUBE_CONTROLLER_MANAGER_ARGS 中指定,/etc/kubernetes/controller-manager 内容如下:

KUBE_CONTROLLER_MANAGER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=0"

对启动参数说明如下:

  • --kubeconfig:设置与 API Server 连接的相关配置,其中 http://10.125.31.81:6443 是集群 kube-apiserver 访问地址 ,/etc/kubernetes/kubeconfig 文件是通过命令生成的(不考虑安全方面),命令如下:
# 设置集群参数
kubectl config set-cluster kubernetes \
  --embed-certs=false \
  --server=http://10.125.31.81:6443
# 设置客户端认证参数
kubectl config set-credentials client \
  --embed-certs=false
# 设置上下文参数
kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=admin
# 设置默认上下文
kubectl config use-context kubernetes

这样我们就在 ~/.kube/ 目录下生成了 kubeconfig 文件,默认文件名叫 config,内容如下:

apiVersion: v1
clusters:
- cluster:
    server: http://10.125.31.81:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: client
  name: kubernetes
current-context: ""
kind: Config
preferences: {}
users:
- name: admin
  user: {}

将 config 文件复制到 /etc/kubernetes 目录并改名为 kubeconfig(~/.kube/ 下的 config 保留给 kubectl 访问集群使用),命令如下:

  $ cp config /etc/kubernetes/kubeconfig
  • --logtostderr:设置为 false 表示将日志写入文件,不写入 stderr。
  • --log-dir:日志目录。
  • --v:日志级别。

5、kube-scheduler服务

kube-scheduler服务也依赖于 kube-apiserver 服务,设置 systemd 服务配置文件 /usr/lib/systemd/system/kube-scheduler.service,内容如下:

[Unit]
Description=Kubernetes Controller Manager
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 中指定,/etc/kubernetes/scheduler 内容如下:

KUBE_SCHEDULER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=0"

对启动参数说明如下:

  • --kubeconfig:设置与 API Server 连接的相关配置,可以与 kube-controller-manager 使用的 kubeconfig 文件相同。
  • --logtostderr:设置为 false 表示将日志写入文件,不写入 stderr。
  • --log-dir:日志目录。
  • --v:日志级别。

配置完成后,执行 systemctl start 命令按顺序启动这3个服务,同时,使用 systemctl enable 命令将服务加入开机启动列表中:

$ systemctl daemon-reload
$ systemctl enable kube-apiserver
$ systemctl start kube-apiserver
$ systemctl enable kube-controller-manager
$ systemctl start kube-controller-manager
$ systemctl enable kube-scheduler
$ systemctl start kube-scheduler

通过 systemctl status 验证服务的启动状态,running 表示启动成功。

至此,Master 上所需的服务就全部启动完成了。

注:如果你需要在 Master 节点上操作 Kubernetes 集群,则需要在 Master 节点上部署 kubelet、kube-proxy 服务,在下一篇文章中会介绍。

你可能感兴趣的:(Kubernetes实战,kubernetes)