Kubernetes-20190307-gjmzj/kubeasz ansible 部署脚本测试

41 篇文章 0 订阅
25 篇文章 0 订阅

Intro

测试来自大佬的 github:https://github.com/gjmzj/kubeasz

测试场景

针对大佬的 github 做了削微的调整,在运维场景中,一般用 sudo 账户进行部署会比较常用。不过要改的地方的确有点多==。
另外增加一个前置 task,完成免密的部分。

# 00-deploy-ssh_key.yml
---

- hosts: deploy
  tasks:
  - name: Generate SSH keys
    shell: ssh-keygen -b 2048 -t rsa -N "" -f /home/{{ ansible_user }}/.ssh/id_rsa -q
    args:
      creates: /home/{{ ansible_user }}/.ssh/id_rsa

  - name: Fetch SSH keys
    fetch:
      src: /home/{{ ansible_user }}/.ssh/id_rsa.pub
      dest: generate_ssh_key/files/
      flat: yes

- hosts: all
  tasks:
  - name: ssh-copy-id
    authorized_key: user={{ ansible_user }} key="{{ lookup('file', 'generate_ssh_key/files/id_rsa.pub') }}" state=present

- hosts: all
  become: true
  become_method: sudo
  tasks:
  - name: sudo without password
    shell: "echo '{{ ansible_user }} ALL=(ALL) NOPASSWD: ALL'  >> /etc/sudoers"

部署的时候,调用命令相同,只是 hosts 文件会有不同。

ansible-playbook -i hosts -e ansible_user=badao -e ansible_password=123 -e ansible_sudo_pass=123 00-deploy-ssh_key.yml --ask-vault 
ansible-playbook -i hosts 90.setup.yml -e ansible_user=badao -e ansible_password=123 --become --become-method=sudo -e ansible_sudo_pass=123 --ask-vault 

NTP_ENABLED 这个最好还是 yes 吧,不然时间不同步,容易出现证书问题。

单节点

没啥特别,不贴了

五节点单主隔离

1 ansible + 1 deploy + 1 master + 2 slave [etcd 单点并共用]

# 集群部署节点:一般为运行ansible 脚本的节点
# 变量 NTP_ENABLED (=yes/no) 设置集群是否安装 chrony 时间同步
[deploy]
192.168.188.201 NTP_ENABLED=yes

# etcd集群请提供如下NODE_NAME,请注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
192.168.188.203 NODE_NAME=etcd1

[new-etcd] # 预留组,后续添加etcd节点使用
#192.168.1.x NODE_NAME=etcdx

[kube-master]
192.168.188.202

[kube-node]
192.168.188.203
192.168.188.204

[new-node] # 预留组,后续添加node节点使用
#192.168.1.xx

# 参数 NEW_INSTALL:yes表示新建,no表示使用已有harbor服务器
# 如果不使用域名,可以设置 HARBOR_DOMAIN=""
[harbor]
#192.168.1.8 HARBOR_DOMAIN="harbor.yourdomain.com" NEW_INSTALL=no

#【可选】外部负载均衡,用于自有环境负载转发 NodePort 暴露的服务等
[ex-lb]
#192.168.1.6 LB_ROLE=backup EX_VIP=192.168.1.250
#192.168.1.7 LB_ROLE=master EX_VIP=192.168.1.250

[all:vars]
# ---------集群主要参数---------------
#集群部署模式:allinone, single-master, multi-master
DEPLOY_MODE=single-master

#集群主版本号,目前支持: v1.8, v1.9, v1.10,v1.11, v1.12, v1.13
K8S_VER="v1.11"

#集群 MASTER IP,自动生成
MASTER_IP="{{ groups['kube-master'][0] }}"
KUBE_APISERVER="https://{{ MASTER_IP }}:6443"

# 集群网络插件,目前支持calico, flannel, kube-router, cilium
CLUSTER_NETWORK="flannel"

# 服务网段 (Service CIDR),注意不要与内网已有网段冲突
SERVICE_CIDR="10.68.0.0/16"

# POD 网段 (Cluster CIDR),注意不要与内网已有网段冲突
CLUSTER_CIDR="172.20.0.0/16"

# 服务端口范围 (NodePort Range)
NODE_PORT_RANGE="20000-40000"

# kubernetes 服务 IP (预分配,一般是 SERVICE_CIDR 中第一个IP)
CLUSTER_KUBERNETES_SVC_IP="10.68.0.1"

# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
CLUSTER_DNS_SVC_IP="10.68.0.2"

# 集群 DNS 域名
CLUSTER_DNS_DOMAIN="cluster.local."

# 集群basic auth 使用的用户名和密码
BASIC_AUTH_USER="admin"
BASIC_AUTH_PASS="test1234"

# ---------附加参数--------------------
#默认二进制文件目录
bin_dir="/opt/kube/bin"

#证书目录
ca_dir="/etc/kubernetes/ssl"

#部署目录,即 ansible 工作目录
base_dir="/etc/ansible"

八节点 - lb (keepalived+haproxy)

1 ansible + 1 deploy + 2 master + 2 slave + 2 lb [etcd 单点并共用]

配置和十一节点差不太多,不贴了

十一节点 - Overall - Deploy 隔离 + Master HA + 多 etcd 集群

1 ansible + 1 deploy + 2 master + 2 slave + 2 lb + 3 etcd

# 集群部署节点:一般为运行ansible 脚本的节点
# 变量 NTP_ENABLED (=yes/no) 设置集群是否安装 chrony 时间同步
[deploy]
192.168.188.125 NTP_ENABLED=yes

# etcd集群请提供如下NODE_NAME,注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
192.168.188.156 NODE_NAME=etcd1 
192.168.188.157 NODE_NAME=etcd2
192.168.188.158 NODE_NAME=etcd3

[new-etcd] # 预留组,后续添加etcd节点使用
#192.168.1.x NODE_NAME=etcdx

[kube-master]
192.168.188.122
192.168.188.123

[new-master] # 预留组,后续添加master节点使用
#192.168.1.5

[kube-node]
192.168.188.132
192.168.188.133

[new-node] # 预留组,后续添加node节点使用
#192.168.1.xx

# 参数 NEW_INSTALL:yes表示新建,no表示使用已有harbor服务器
# 如果不使用域名,可以设置 HARBOR_DOMAIN=""
[harbor]
#192.168.1.8 HARBOR_DOMAIN="harbor.yourdomain.com" NEW_INSTALL=no

# 负载均衡(目前已支持多于2节点,一般2节点就够了) 安装 haproxy+keepalived
[lb]
192.168.188.142 LB_ROLE=backup
192.168.188.143 LB_ROLE=master

#【可选】外部负载均衡,用于自有环境负载转发 NodePort 暴露的服务等
[ex-lb]
#192.168.1.6 LB_ROLE=backup EX_VIP=192.168.1.250
#192.168.1.7 LB_ROLE=master EX_VIP=192.168.1.250

[all:vars]
# ---------集群主要参数---------------
#集群部署模式:allinone, single-master, multi-master
DEPLOY_MODE=multi-master

#集群主版本号,目前支持: v1.8, v1.9, v1.10,v1.11, v1.12, v1.13
K8S_VER="v1.10"

# 集群 MASTER IP即 LB节点VIP地址,为区别与默认apiserver端口,设置VIP监听的服务端口8443
# 公有云上请使用云负载均衡内网地址和监听端口
MASTER_IP="192.168.188.121"
KUBE_APISERVER="https://{{ MASTER_IP }}:8443"

# 集群网络插件,目前支持calico, flannel, kube-router, cilium
CLUSTER_NETWORK="flannel"

# 服务网段 (Service CIDR),注意不要与内网已有网段冲突
SERVICE_CIDR="10.68.0.0/16"

# POD 网段 (Cluster CIDR),注意不要与内网已有网段冲突
CLUSTER_CIDR="172.20.0.0/16"

# 服务端口范围 (NodePort Range)
NODE_PORT_RANGE="20000-40000"

# kubernetes 服务 IP (预分配,一般是 SERVICE_CIDR 中第一个IP)
CLUSTER_KUBERNETES_SVC_IP="10.68.0.1"

# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
CLUSTER_DNS_SVC_IP="10.68.0.2"

# 集群 DNS 域名
CLUSTER_DNS_DOMAIN="cluster.local."

# 集群basic auth 使用的用户名和密码
BASIC_AUTH_USER="admin"
BASIC_AUTH_PASS="test1234"

# ---------附加参数--------------------
#默认二进制文件目录
bin_dir="/opt/kube/bin"

#证书目录
ca_dir="/etc/kubernetes/ssl"

#部署目录,即 ansible 工作目录,建议不要修改
base_dir="/etc/ansible"

Issue List

-g 被替代为 --data-root

-g and --graph flags on dockerd
Deprecated In Release: v17.05.0
The -g or --graph flag for the dockerd or docker daemon command was used to indicate the directory in which to store persistent data and resource configuration and has been replaced with the more descriptive --data-root flag.
These flags were added before Docker 1.0, so will not be removed, only hidden, to discourage their use.

以上引自:

  1. Deprecated Engine Features
  2. docker - 修改镜像/容器文件或者 “Docker root dir” 的在宿主机上的存储位置

Ansible synchronize delegate_to

ansible 主机将同步任务 delegate 到两台机器 A,B 之间,并用 sudo 账户 c@A,d@B 进行 synchronize 同步,但是需要注意的是 c@A 和 d@B 之间必须可以免密登录。此时如果传输的文件或者文件所在的目录及父目录对该 sudo 账户没有读取权限,就会出现卡住的情况,想要解决权限问题,一是改文件本身的权限和 owner,二是 sudo 免密 su - root。
简单说,如果权限不能放那么开,那么最低限度,在不对文件进行转存的情况下,在原目录下,就要做到父级目录对 sudo 用户可读,文件对 root 用户可读,sudo 用户免密 su 到 root 账户。

If you don’t require password for the user to sudo on the target machine (or just do configure it this way for the rsync command) you can use delegate_to: <your_server> parameter combined with rsync_path=“sudo rsync” to run it explicitly with sudo.

以上引自:
Permission denied in Ansible synchronize module

sudo 账户免密登录

echo "<username> ALL=(ALL) NOPASSWD: ALL"  >> /etc/sudoers

以上引自:
linux “sudo” 免密设置

ansible sudo 免密 su -

以上引自:
ansible批量加用户

Ansible 生成 ssh_key

ssh key ansible

以上引自:
Generate SSH keys with Ansible

sudo 用户 lineinfile

以上引自:
Ansible SSH Setup Playbook

kube-apiserver 报错不能连接上 etcd

报错如下:

etcd rejected connection from "192.168.188.128:50566" (error "remote error: tls: bad certificate", ServerName

最终发现总是报错证书有问题,其实是因为节点的时间没有作同步,当然也是因为我是测试环境,频繁 snapshot 到之前某个时间,然后不注意调整时间的结果。
这个清奇但是有理的思路来自一个博客,虽然博主的版面设计很二,但是写的很有道理。

解法引自:
Kubernetes实战(七)——手动部署ETCD集群

Ubuntu 18.04 奇妙的 snap 从安装开始

ubuntu snap

和 Ubuntu 之前版本的差别也是显而易见。记一下目前所见:

  • 修改主机名还需要修改 preserve_hostname
sudo vim /etc/cloud/cloud.cfg
#找到preserve_hostname: false修改为preserve_hostname: ture

以上引自:
Ubuntu 18.04 修改主机名

  • 修改端口 ip 地址需要使用 netplan 修改
    /etc/netplan/*.yaml下的所有文件将被netplan读取

以上引自:
如何在Ubuntu 18.04中配置网络静态IP地址

/usr/lib/systemd//.service

验证一下是否为开机启动:
systemctl is-enabled supervisord

查看所有已启动的服务
systemctl list -units –type=service

以上引自:
linux常用文件位置实例说明之-/lib/systemd/system/目录

killall -0 haproxy

kill -0 pid 的作用是用来检测指定的进程PID是否存在, 存在返回0, 反之返回1

以上引自:
【原创】kill -0 pid 或者 posix_kill($pid, 0) 作用是什么?

  • kill -9 强杀
  • kill -15 自杀
  • kill -0 不发送任何信号,但是会进行错误检查

另外,

  • kill + pid
  • pkill + 名称(缩略也可以)
  • killall + 名称(全称)

以上引自:
[Linux] killall 、kill 、pkill 命令详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值