欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二进制文件安装 Kubernetes v1.3.0

程序员文章站 2024-03-17 13:03:40
...

安装 kubernetes 的三种方法

  • 利用包管理工具安装:如 yum, apt 等
  • 在 github 上的 Kubernetes 项目页下载编译好的二进制包
  • 下载源码然后编译安装

这里用第二种方法来安装一下 Kubernetes。

各组件的版本

组件 版本 备注
Kubernetes 1.3.0 从 github 上下载的
Docker 1.13.1 centos 7 上用 yum 安装
etcd 3.0 下载二进制文件安装

下载页面:https://github.com/kubernetes/kubernetes/releases?after=v1.3.1

下载地址:https://github.com/kubernetes/kubernetes/releases/download/v1.3.0/kubernetes.tar.gz

压缩包 kubernetes.tar.gz 内包含了 Kubernetes 的服务程序文件、文档和示例。

解压缩之后,server 子目录中的 kubernetes-server-linux-amd64.tar.gz 文件包含了 Kubernetes 需要运行的全部服务程序文件。

文件名 说明
hyperkube 总控程序,用于运行其他 Kubernetes 程序
kube-apiserver apiserver 主程序
kube-apiserver.docker_tag apiserver docker 镜像的 tag
kube-apiserver.tar apiserver docker 镜像文件
kube-controller-manager controller-manager 主程序
kube-controller-manager.docker_tag controller-manager docker 镜像的 tag
kube-controller-manager.tar controller-manager docker 镜像文件
kubectl 客户端命令工具
kubelet kubelet 主程序
kube-proxy proxy 主程序
kube-scheduler scheduler 主程序
kube-scheduler.docker_tag scheduler docker 镜像的 tag
kube-scheduler.tar scheduler docker 镜像文件

Master 和 Node 节点上需要安装的程序

节点 需要安装的程序
Kubernetes Master etcd、kube-apiserver、kube-controller-manager、kube-scheduler
Kubernetes Node kubelet、kube-proxy

Kubernetes 还提供了一个“all-in-one”的 hyperkube 程序来完成对以上服务程序的启动。

关闭防火墙

由于是实验阶段,可以直接把防火墙给关了,这样的话可以避免很多意想不到的困难。

# 禁用虚拟机
systemctl disable firewalld
# 关闭防火墙
systemctl stop firewalld

Master 上的 etcd、kube-apiserver、kube-controller-manager、kube-scheduler 服务

将 Kubernetes 的可执行文件复制到 /user/bin,如果复制到其他目录,则将 systemd 服务文件中的文件路径修改正确即可。

etcd 服务

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

从 GitHub 官网下载 etcd 发布的二进制文件,将 etcd 和 etcdctl 文件复制到 /usr/bin 目录

systemd 服务文件 /usr/lib/systemd/system/etcd.service:

etcd 下载页面:https://github.com/etcd-io/etcd/releases?after=v3.0.1

etcd 下载地址:https://github.com/etcd-io/etcd/releases/download/v3.0.0/etcd-v3.0.0-linux-amd64.tar.gz

# 下载 etcd 的二进制文件
wget https://github.com/etcd-io/etcd/releases/download/v3.0.0/etcd-v3.0.0-linux-amd64.tar.gz
# 解压
tar zxvf etcd-v3.0.0-linux-amd64.tar.gz
# 将etcd和 etcdctl 复制到 /usr/bin 目录
mv etcd etcdctl /usr/bin
# 创建 systemd 服务文件

systemd 服务文件 /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
# 创建 etcd 的数据目录
mkdir /var/lib/etcd

# 加入到开机列表并启动服务
systemctl daemon-reload
systemctl enable etcd.service
systemctl start etcd.service

# 验证是否启动正确
etcdctl cluster-health

[[email protected] ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
cluster is healthy

到这一阶段 etcd 已经装好了

kube-apiserver 服务

先下载好对应的版本呢,然后解压,把这几个复制到 /usr/bin 下

mv kube-apiserver kube-controller-manager kube-scheduler /usr/bin

将 kube-apiserver 的可执行文件复制到 /usr/bin 目录,编辑systemd 服务文件 /usr/lib/systemd/system/kube-apiserver.service,内容如下:

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"

启动参数说明

kube-controller-manager 服务

cat /usr/lib/systemd/system/kube-controller-manager.server

[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=65535

[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.18.3:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

kube-scheduler 服务

kube-scheduler 服务也依赖于 kube-apiserver 服务

cat /usr/lib/systemd/system/kube-scheduler.service

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kbue-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.18.3:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

#systemctl start 命令启动这三个服务
#systemctl enable 将服务加入开机启动


systemctl daemon-reload
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
systemctl enable kube-scheduler
systemctl start kube-scheduler

# systemctl status <service_name> 来验证服务的启动状态
# running 表示启动成功

至此 Master 上的服务就全部启动完成了,嗯,有啥问题多看看日志啥的

Node 上的 kubelet、kube-proxy服务

在Node 节点上需要预先安装好 Docker Daemon,并且正常启动。

kubelet 服务

kubelet 服务依赖于 Docker 服务

cat /usr/lib/systemd/system/kubelet.service

[Unit]
Description=Kubernetes Kubelete 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 的全部启动参数

cat /etc/kubernetes/kubelet

KUBELET_ARGS="--api-server=http://192.168.12.201:8080 --hostname-override=192.168.12.201 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

启动参数的说明如下

kube-proxy 服务

kube-proxy 服务依赖于 network 服务

[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.service
Requires=network.service

[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

配置文件 /etc/kubernetes/proxy 的内容包括了 kube-proxy 的全部启动参数


cat /etc/kubernetes/proxy

KUBE_PROXY_ARGS="--master=http://192.168.12.200:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

kubelet 和 kube-proxy 服务的启动命令


systemctl daemon-reload
systemctl enable kubelet.service
systemctl start kubelet.service
systemctl enable kube-proxy
systemctl start kube-proxy
mv kubelet kube-proxy /usr/bin

Kubernetes 集群的安全设置

1. 基于 CA 签名的双向数字证书认证方式

如果只是在内网环境中, Kubernetes 的各个组件与 Master 之间可以通过 apiserver 的非安全端口 http://apiserver:8080 进行访问。如果 apiserver 需要对外提供服务,或者集群中的某些容器也要通过 apiserver 以获取集群中的某些信息,则更安全的做法是启用 HTTPS 安全机制。

Kubernetes 提供了:

  • 基于 CA 签名的双向数字证书认证
  • 基于 HTTP BASE 或者 TOKEN 的认证方式

其中 CA 的安全性更高。

2. 基于 HTTP BASE 或 TOKEN 的简单认证方式

Kubernetes 的版本升级

Kubernetes 的版本升级需要考虑到当前集群中正在运行的容器不受影响。应对集群中的各个Node 逐个进行隔离,然后等待在其上运行的容器全部执行完成,再更新该 Node 上的 kubelet 和 kube-proxy 服务,将全部 Node 都更新完后,最后更新 Master 服务。

  • 通过官网获取最新的二进制包 kubernetes.tar.gz,解压后提取二进制文件
  • 逐个隔离Node,等待在其上运行的服务全部容器工作完成,更新 kubelet 和 kube-proxy 服务文件,然后重启这两个服务
  • 更新 Master 的 kube-apiserver、kube-controller-manager、kube-scheduler 服务文件并重启

内网中的 Kubernetes 配置

其实就是因为很多情况下内网都不能访问 Internete 所以也就不能拉取镜像,就要配置一个私有的镜像仓库