使用 kubeasz 安装 kubernetes 集群
kubeasz github https://github.com/easzlab/kubeasz
配置:4核心 8GB内存(仅master角色2G内存也行)
系统:CentOS-7.6 1810 Minimal
注意:
1.开始安装前确保系统时间正常
2.所有命令只需要在部署节点(192.168.2.71)执行
3.只需要更改 配置变量中的 SERVER_NAM SERVER_IP 变量 与 /etc/ansible/hosts 配置文件 其他参数均以变量方式自动识别
角色信息:
etcd: 192.168.2.71 192.168.2.72 192.168.2.73
kube-master: 192.168.2.71 192.168.2.72
kube-node: 192.168.2.72 192.168.2.73 192.168.2.74
chrony: 192.168.2.71
- 配置变量
# 替换变量值为实际IP地址 注意主机名与IP个数对应 以空格分隔
SERVER_NAME=(node01 node02 node03 node04)
SERVER_IP=(192.168.2.71 192.168.2.72 192.168.2.73 192.168.2.74)
- 设置本地Host解析
# 清理 hosts(只保留2行 新增 k8s 集群主机hosts解析)
sed -i '3,$d' /etc/hosts
echo -e "\n# k8s cluster" >> /etc/hosts
let SER_LEN=${#SERVER_IP[@]}-1
for ((i=0;i<=$SER_LEN;i++)); do
echo "${SERVER_IP[i]} ${SERVER_NAME[i]}" >> /etc/hosts
done
- 配置ssh秘钥登录
# 替换 SSH_RROT_PASSWD 值为 root SSH 密码
SSH_RROT_PASSWD=redhat
curl -sSL -o ssh-key-copy.sh https://dwz.cn/S0NQWllm
chmod +x ssh-key-copy.sh && ./ssh-key-copy.sh "$(echo ${SERVER_IP[@]})" root $SSH_RROT_PASSWD
# 同步hosts文件
for node in ${SERVER_IP[@]}; do
scp /etc/hosts $node:/etc/hosts
done
- 设置主机名
for node in ${SERVER_IP[@]}; do
ssh -T $node <<'EOF'
HOST_IF=$(ip route|grep default|cut -d ' ' -f5)
HOST_IP=$(ip a|grep "$HOST_IF$"|awk '{print $2}'|cut -d'/' -f1)
hostnamectl set-hostname $(grep $HOST_IP /etc/hosts | awk '{print $2}')
EOF
done
- 优化参数
for node in ${SERVER_IP[@]}; do
ssh -T $node <<'EOF'
# 优化ssh连接速度
sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config
sed -i "s/GSSAPIAuthentication .*/GSSAPIAuthentication no/" /etc/ssh/sshd_config
systemctl restart sshd
# 配置yum源
rm -f /etc/yum.repos.d/*.repo
curl -so /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -so /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i '/aliyuncs.com/d' /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/epel-7.repo
EOF
done
- 关闭部署机防火墙
当前部署节点与k8s集群共用一节点 安装k8s集群会删除防火墙导致 部署容器网络故障 部署失败
systemctl stop firewalld
systemctl disable firewalld
- 下载安装资源
下载easzup
export release=2.0.3
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/easzup
chmod +x ./easzup
替换镜像加速站点
cp easzup .easzup
sed -i 's#"https://dockerhub.azk8s.cn",#"http://3272dd08.m.daocloud.io"#' easzup
sed -ni 'p;/3272dd08/n' easzup
sed -ni 'p;/3272dd08/n' easzup
下载资源
./easzup -D
- 开始安装
启动&进入 ansible-docker
# 同步容器时区
sed -i '280a\ --volume /etc/localtime:/etc/localtime \\' easzup
# 启动&进入
./easzup -S
docker exec -it kubeasz /bin/bash
创建ansibel配置文件
# 复制模板
cp /etc/ansible/example/hosts.multi-node /etc/ansible/hosts
# 手动修改修改配置文件 /etc/ansible/host 以下参数根据实际情况修改
vi /etc/ansible/hosts
[etcd]
192.168.2.71 NODE_NAME=etcd1
192.168.2.72 NODE_NAME=etcd2
192.168.2.73 NODE_NAME=etcd3
[kube-master] # 此处填写 master IP 除k8s网络容器外不运行其他pod
192.168.2.71
192.168.2.72
[kube-node] # 此处填写 work 节点IP
192.168.2.72
192.168.2.73
192.168.2.74
[chrony]
192.168.2.71
配置私有仓库, docker加速
在安装前配置(因为修改这些配置需要重启docker服务)
# 修改docker 加速地址
sed -i "s#REG_MIRRORS:.*#REG_MIRRORS: '[\"http://3272dd08.m.daocloud.io\"]'#" /etc/ansible/roles/docker/defaults/main.yml
# 修改信任docker 仓库 (修改HARBOR 变量为本地仓库地址)
HARBOR=192.168.2.75
sed -i "s#127.0.0.1/8#$HARBOR#" /etc/ansible/roles/docker/defaults/main.yml
安装
cd /etc/ansible
ansible all -m ping # 验证配置文件中的主机通信
ansible-playbook 90.setup.yml # 安装
ansible-playbook 99.clean.yml # 清理(安装失败还原环境)
- 安装后续处理
查看登录令牌
# admin 登录令牌
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
# 只读 登录令牌
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep read-user | awk '{print $1}')
# 写入配置文件
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') | grep token: | sed 's#^token: # token:#' >> ~/.kube/config
# 安装 lrzsz 后使用 sz ~/.kube/config 到win主机 使用此文件可以直接登录k8s web控制台
# 定时备份 etcd
echo '0 */1 * * * /usr/bin/ansible-playbook /etc/ansible/23.backup.yml >> /tmp/etcd_backup.log' > /etc/crontab
crontab /etc/crontab
# 部署完成 删除部署容器
exit
docker rm -f kubeasz
管理
退出重新登录终端(原因:重读环境变量)
# 查看 dashboard 端口
kubectl -n kube-system get svc | grep kubernetes-dashboard
# 节点状态
kubectl get node
kubectl top node