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 的 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 二进制文件,图示如下:
将 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"
对启动参数说明如下:
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"
对启动参数说明如下:
# 设置集群参数
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
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"
对启动参数说明如下:
配置完成后,执行 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
至此,Master 上所需的服务就全部启动完成了。
注:如果你需要在 Master 节点上操作 Kubernetes 集群,则需要在 Master 节点上部署 kubelet、kube-proxy 服务,在下一篇文章中会介绍。