原文链接地址:『高级篇』docker 之 kubernetes 基础集群部署(上)(33)
这次继续集群的部署 simple 版本. 源码: https://github.com/limingios/msA-docker k8s 分支和 https://github.com/limingios/kubernetes-starter
基础集群部署 - kubernetes-simple
部署 ETCD(主节点)
简介
ETCD 保证了数据的存储, 保证了数据的高可用, 还有数据的一致性, 它跟 zookeeper 类似. kubernetes 需要存储很多东西, 像它本身的节点信息, 组件信息, 还有通过 kubernetes 运行的 pod,deployment,service 等等. 都需要持久化. etcd 就是它的数据中心. 生产环境中为了保证数据中心的高可用和数据的一致性, 一般会部署最少三个节点. 我们这里以学习为主就只在主节点部署一个实例.
如果你的环境已经有了 etcd 服务(不管是单点还是集群), 可以忽略这一步. 前提是你在生成配置的时候填写了自己的 etcd endpoint 哦~
部署
etcd 的二进制文件和服务的配置我们都已经准备好, 现在的目的就是把它做成系统服务并启动.(这个是要在主节点操作的, 在 server01 上)
- # 把服务配置文件 copy 到系统服务目录
- cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/
- #enable 服务
- systemctl enable etcd.service
- # 创建工作目录(保存数据的地方)
- mkdir -p /var/lib/etcd
- # 启动服务
- service etcd start
- # 查看服务日志, 看是否有错误信息, 确保服务正常
- journalctl -f -u etcd.service
- # 查看在线的端口 2379 2380
- netstat -ntlp
查看 etcd 的配置
WorkingDirectory 工作目录配置文件存在这个路径下
ExecStart 执行的命令
name 名称
listen-client-urls 监听节点
advertise-client-urls 建议其他人访问的地址
data-dir 数据目录
vi /lib/systemd/system/etcd.service
PS: 提示 start etcd 已经启动
部署 APIServer(主节点)
简介
kube-apiserver 是 Kubernetes 最重要的核心组件之一, 主要提供以下的功能
提供集群管理的 REST API 接口, 包括认证授权 (我们现在没有用到) 数据校验以及集群状态变更等
提供其他模块之间的数据交互和通信的枢纽(其他模块通过 API Server 查询或修改数据, 只有 API Server 才直接操作 etcd)
生产环境为了保证 apiserver 的高可用一般会部署 2 + 个节点, 在上层做一个 lb 做负载均衡, 比如 haproxy. 由于单节点和多节点在 apiserver 这一层说来没什么区别, 所以我们学习部署一个节点就足够啦
部署
APIServer 的部署方式也是通过系统服务. 部署流程跟 etcd 完全一样, 不再注释
- cp kubernetes-starter/target/master-node/kube-apiserver.service /lib/systemd/system/
- systemctl enable kube-apiserver.service
- service kube-apiserver start
- journalctl -f -u kube-apiserver
重点配置说明
- [Unit]
- Description=Kubernetes API Server
- ...
- [Service]
- # 可执行文件的位置
- ExecStart=/home/michael/bin/kube-apiserver \
- # 非安全端口 (8080) 绑定的监听地址 这里表示监听所有地址
- --insecure-bind-address=0.0.0.0 \
- # 不使用 https
- --kubelet-https=false \
- #kubernetes 集群的虚拟 ip 的地址范围
- --service-cluster-ip-range=10.68.0.0/16 \
- #service 的 nodeport 的端口范围限制
- --service-node-port-range=20000-40000 \
- # 很多地方都需要和 etcd 打交道, 也是唯一可以直接操作 etcd 的模块
- --etcd-servers= http://192.168.1.102:2379 \
- ...
部署 ControllerManager(主节点)
简介
Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 组成, 是 Kubernetes 的大脑, 它通过 apiserver 监控整个集群的状态, 并确保集群处于预期的工作状态.
kube-controller-manager 由一系列的控制器组成, 像 Replication Controller 控制副本, Node Controller 节点控制, Deployment Controller 管理 deployment 等等
cloud-controller-manager 在 Kubernetes 启用 Cloud Provider 的时候才需要, 用来配合云服务提供商的控制
controller-manager,scheduler 和 apiserver 三者的功能紧密相关, 一般运行在同一个机器上, 我们可以把它们当做一个整体来看, 所以保证了 apiserver 的高可用即是保证了三个模块的高可用. 也可以同时启动多个 controller-manager 进程, 但只有一个会被选举为 leader 提供服务.
部署
通过系统服务方式部署
- cp ~/kubernetes-starter/target/master-node/kube-controller-manager.service /lib/systemd/system/
- systemctl enable kube-controller-manager.service
- service kube-controller-manager start
- journalctl -f -u kube-controller-manager
重点配置说明
- [Unit]
- Description=Kubernetes Controller Manager
- ...
- [Service]
- ExecStart=/home/michael/bin/kube-controller-manager \
- # 对外服务的监听地址, 这里表示只有本机的程序可以访问它
- --address=127.0.0.1 \
- #apiserver 的 url
- --master= http://127.0.0.1:8080 \
- # 服务虚拟 ip 范围, 同 apiserver 的配置
- --service-cluster-ip-range=10.68.0.0/16 \
- #pod 的 ip 地址范围
- --cluster-cidr=172.20.0.0/16 \
- # 下面两个表示不使用证书, 用空值覆盖默认值
- --cluster-signing-cert-file= \
- --cluster-signing-key-file= \
- ...
PS: 下次继续把 k8s 的基础搭建完成. 这个坑很大, 注意自己的符号标点, 我就是把端口签名的冒号写成了点. 找了 4 个小时各种试才发现的. 里面有写错的, 192.168.1.101.2379 改成 192.168.1.101:2379
来源: https://juejin.im/post/5c6c344be51d4539a56a0388