在 CoreOS 初始化完毕后, 可以通过官方文档 CoreOS + Kubernetes Step By Step 完成安装 kubernetes 相关组件, 但是过程比较烦杂, 容易出现错误. 本项目的目标在 master 和 worker 上执行相应的脚本, 能快速完成 kubernetes 集群的配置.
项目修改自 xiaohe1977/coreos-bare-metal:bare-metal, 修改内容如下:
- 重构说明文档
- 脚本修改 master 和 worker 节点 TLS 生成逻辑
- 增加配置文件 environment 读取项
- 修复一些bug
- 脚本删除 flannel 的配置
- k8s => kubernetes
在使用脚本安装前, 需要确定集群服务器能稳定翻墙和 CoreOS 中的 etcd2
、flannel
正常运行, 脚本会进行以下操作:
- 生成 master 和 worker 的 TLS 秘钥
- 配置 kubelet
- 生成 k8s 服务组件配置文件
- master (kube-apiserver.yaml、kube-controller-manager.yaml、kube-proxy.yaml、kube-scheduler.yaml),
- worker (kube-proxy.yaml)
- 通过 kubelet 服务启动 k8s 服务组件容器
etcd2
etcd2 多节点组成的高可用配置管理服务, 通过配置 ETCD_DISCOVERY
让节点之间自动发现组成集群. ETCD_DISCOVERY
配置项通过下面命令生成:
# 其中 size=3 是集群中节点的数量
curl -w "\n" 'https://discovery.etcd.io/new?size=3'
通过 cloud-config 配置 etcd2, 多节点需要修改相应字段, 配置文件如下:
-
discovery 上面生成的 token
-
10.10.10.191 地址需要替换成本机的 IP 地址
-
hostname 字段更换为本机的名称
-
ssh_authorized_keys 替换为自己公钥
#cloud-config
coreos:
etcd2:
discovery: "https://discovery.etcd.io/4ec397f88b10332c5db76aa55a36767d"
# multi-region and multi-cloud deployments need to use $public_ipv4
advertise-client-urls: "http://10.10.10.191:2379"
initial-advertise-peer-urls: "http://10.10.10.191:2380"
# listen on both the official ports and the legacy ports
# legacy ports can be omitted if your application doesn't depend on them
listen-client-urls: "http://0.0.0.0:2379,http://0.0.0.0:4001"
listen-peer-urls: "http://10.10.10.191:2380,http://10.10.10.191:7001"
update:
reboot-strategy: "etcd-lock"
units:
- name: "etcd2.service"
command: "start"
- name: "docker.socket"
command: "start"
hostname: "coreos-191"
ssh_authorized_keys:
- "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzAy8KEKxDMmjd55RMKLFs8bhNGHgC+pvjbC7BOp4gibozfZAr84nWsfZPs44h1jMq0pX2qzGOpzGEN9RH/ALFCe/OixWkh+INnVTIr8scZr6M+3NzN+chBVGvmIAebUfhXrrP7pUXwK06T2MyT7HaDumfUiHF+n3vNIQTpsxnJA7lmx2IJvz6EujK9le75vJM19MsbUZDk61wuiqhbUZMwQEAKrWsvt9CPhqyHD2Ueul0cG/0fHqOXS/fw7Ikg29rUwdzRuYnvw6izuvBoaHF6nNxR+qSiVi3uyJdNox0/nd87OVvd0fE5xEz+xZ8aFwGyAZabo/KWgcMxk6WN0O1Q== lipeng@Megatron"
users:
- name: "ops"
passwd: "$6$rounds=656000$fgFH.d8/o8iamB2U$maTs.wA6WnRe0Lg4vBd9E6PVI9lsENftY5i4bmBCTSiu14WYNsRMg5dgKWJAdvKESC1Y1YvN4F3vYVqugc8Np/"
groups:
- "sudo"
- "docker"
cloud-config 使用说明
系统工具 coreos-cloudinit
根据 cloud-config 文件中的描述,对 CoreOS 系统做定制 (customization). 在系统启动后, 可以手动执行
coreos-cloudinit --from-file <cloud-config>
使 <cloud-config> 中的配置立即生效. 在每次系统启动时, coreos-cloudinit 都会执行, 并以一个默认的文件做为 cloud-config,对于 bare metal 安装的 CoreOS, 这个默认文件是 /var/lib/coreos-install/user_data
.
通过以上方法使得集群 etcd2
运行正常, 下面就开始执行 k8s 集群的安装脚本
Master 节点安装
进入家目录, 下载 k8s-coreos-bare-metal 项目 zip 包 进入 master 安装目录
# 下载项目 ZIP 包, 并解压
cd ~ && wget https://github.com/k8sp/k8s-coreos-bare-metal/archive/master.zip && unzip master.zip
# 进入 master 安装目录
cd k8s-coreos-bare-metal-master/master/
修改 environment 中 COREOS_PUBLIC_IPV4
、COREOS_PRIVATE_IPV4
中 IP 地址为本机 IP
# 修改 environment
vim environment
------
COREOS_PUBLIC_IPV4=10.10.10.191
COREOS_PRIVATE_IPV4=10.10.10.191
执行 k8s master 安装脚本
sudo bash setup_k8s_master.sh
执行完后, 确认 kubelet 服务正常, 443、8080等端口正常打开, 如下图:
Worker 节点安装
下载 k8s-coreos-bare-metal 项目 zip 包 进入 worker 安装目录
# 下载项目 ZIP 包, 并解压
wget https://github.com/k8sp/k8s-coreos-bare-metal/archive/master.zip && unzip master.zip
# 进入 worker 安装目录
cd k8s-coreos-bare-metal-master/worker/
修改 environment 中 COREOS_PUBLIC_IPV4
、COREOS_PRIVATE_IPV4
、KUBERNETES_MASTER_IPV4
、KUBERNETES_WORKER_FQDN
中 变量信息
- COREOS_PUBLIC_IPV4、COREOS_PRIVATE_IPV4: 本机 IP 地址
- KUBERNETES_MASTER_IPV4: master 节点 IP地址
- KUBERNETES_WORKER_FQDN: worker 节点命名
# 修改 environment
vim environment
------
COREOS_PUBLIC_IPV4=10.10.10.212
COREOS_PRIVATE_IPV4=10.10.10.212
KUBERNETES_MASTER_IPV4=10.10.10.211
KUBERNETES_WORKER_FQDN=kube-worker1
创建 ssl 目录, 拷贝 master 节点 /home/core/k8s-coreos-bare-metal-master/master/ssl/worker 到 ssl 目录下
# 创建 ssl 目录
mkdir ssl
# 拷贝项目目录下 ssl/worker 到 ssl/
scp -r kube-master:~/k8s-coreos-bare-metal-master/master/ssl/worker ssl/
执行 k8s worker 安装脚本
sudo bash setup_k8s_worker.sh
执行完成后, 等待 3 分钟确认 kubelet 服务、端口状态
配置客户端 Kubectl
下载 k8s-coreos-bare-metal 项目 zip 包 进入 kubectl 安装目录
# 下载项目 ZIP 包, 并解压
wget https://github.com/k8sp/k8s-coreos-bare-metal/archive/master.zip && unzip master.zip
# 进入 kubectl 安装目录
cd k8s-coreos-bare-metal-master/kubectl/
根据不同的系统配置不同kubectl
# Linux 客户端
ln -sf kubectl_linux kubectl
# MacOS 客户端
ln -sf kubectl_macos kubectl
拷贝 master 节点项目生成的连接秘钥文件( /home/coreos/k8s-coreos-bare-metal-master/master/ssl/kubectl/*)到到当前目录,
scp -r 'kube-master:~/k8s-coreos-bare-metal-master/master/ssl/kubectl/*' .
当前目录下的文件如下图:
修改 kube.sh 中 MASTER_HOST
的IP地址
vim kube.sh
------
#! /bin/bash
MASTER_HOST=10.10.10.211
执行 kube.sh, 测试 kubectl 命令是否正常
# 导入配置到当前 bash 环境
source kube.sh
# 测试 kubectl 连接是否正常
./kubectl get node