美文网首页
K8S环境搭建

K8S环境搭建

作者: 小小的小帅 | 来源:发表于2021-07-19 11:53 被阅读0次

参考:https://open.hand-china.com/document-center/doc/product/10003/10426?doc_id=125702&doc_code=1744

K8S环境搭建

  • 节点要求CentOS 7.4版本或以上
  1. 环境准备
    vi install-ansible.sh
#!/bin/bash
sudo yum install -y epel-release || sudo apt-get update
sudo yum install -y git python3-pip sshpass || sudo apt-get install -y git python3-pip sshpass build-essential libssl-dev libffi-dev python-dev
sudo pip3 install --no-cache-dir ansible==2.8.5 netaddr==0.7.19 -i https://mirrors.aliyun.com/pypi/simple/
# 安装 git 命令行
sudo yum install git -y
# 克隆本项目代码
git clone https://github.com/choerodon/kubeadm-ha.git
# 进入项目目录
cd kubeadm-ha
# 安装 ansible 环境
sudo sh install-ansible.sh
  • 安装ansible 环境报错
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-*解决办法
pip3 install --upgrade pip

2.修改inventory.ini配置

  • 复制配置文件
#复制配置文件
cp example/hosts.m-master.ip.ini inventory.ini
mkdir -p /mnt/system
yum -y install vim
vim inventory.ini
  • 修改配置
; 将所有节点的信息在这里填写
;    第一个字段                  为节点内网IP,部署完成后为 kubernetes 节点 nodeName
;    第二个字段 ansible_port     为节点 sshd 监听端口
;    第三个字段 ansible_user     为节点远程登录用户名
;    第四个字段 ansible_ssh_pass 为节点远程登录用户密码
[all]
129.211.24.177 ansible_port=22 ansible_user="root" ansible_ssh_pass="xxxxx."

; 单节点lb节点组留空。
[lb]

; 注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
129.211.24.177

[kube-master]
129.211.24.177

[kube-worker]
129.211.24.177

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

; 预留组,后续添加worker节点使用
[new-worker]

; 预留组,后续添加etcd节点使用
[new-etcd]

; 预留组,后续删除worker角色使用
[del-worker]

; 预留组,后续删除master角色使用
[del-master]

; 预留组,后续删除etcd角色使用
[del-etcd]

; 预留组,后续删除节点使用
[del-node]

;-------------------------------------- 以下为基础信息配置 ------------------------------------;
[all:vars]
; 是否跳过节点物理资源校验,Master节点要求2c2g以上,Worker节点要求2c4g以上
skip_verify_node=false
; kubernetes版本
kube_version="1.18.5"
; 负载均衡器
;   有 openresty、nginx、haproxy、envoy  和 slb 可选,默认使用 openresty
;   为什么单节点 apiserver 也使用了负载均衡请参与此讨论: https://github.com/TimeBye/kubeadm-ha/issues/8
lb_mode="openresty"
; 使用负载均衡后集群 apiserver port
lb_kube_apiserver_port="8443"

; 网段选择:pod 和 service 的网段不能与服务器网段重叠,
; 若有重叠请配置 `kube_pod_subnet` 和 `kube_service_subnet` 变量设置 pod 和 service 的网段,示例参考:
;    如果服务器网段为:10.0.0.1/8
;       pod 网段可设置为:192.168.0.0/18
;       service 网段可设置为 192.168.64.0/18
;    如果服务器网段为:172.16.0.1/12
;       pod 网段可设置为:10.244.0.0/18
;       service 网段可设置为 10.244.64.0/18
;    如果服务器网段为:192.168.0.1/16
;       pod 网段可设置为:10.244.0.0/18
;       service 网段可设置为 10.244.64.0/18
; 集群pod ip段,默认掩码位 18 即 16384 个ip
kube_pod_subnet="10.244.0.0/18"
; 集群service ip段
kube_service_subnet="10.244.64.0/18"
; 分配给节点的 pod 子网掩码位,默认为 24 即 256 个ip,故使用这些默认值可以纳管 16384/256=64 个节点。
kube_network_node_prefix="24"

; node节点最大 pod 数。数量与分配给节点的 pod 子网有关,ip 数应大于 pod 数。
; https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr
kube_max_pods="110"

; 集群网络插件,目前支持flannel,calico,kube-ovn
network_plugin="flannel"

; 若服务器磁盘分为系统盘与数据盘,请修改以下路径至数据盘自定义的目录。
; Kubelet 根目录
kubelet_root_dir="/mnt/system/kubelet"
; docker容器存储目录
docker_storage_dir="/mnt/system/docker"
; Etcd 数据根目录
etcd_data_dir="/mnt/system/etcd"

  • 多节点
; 将所有节点的信息在这里填写
;    第一个字段                  为节点内网IP,部署完成后为 kubernetes 节点 nodeName
;    第二个字段 ansible_port     为节点 sshd 监听端口
;    第三个字段 ansible_user     为节点远程登录用户名
;    第四个字段 ansible_ssh_pass 为节点远程登录用户密码
[all]
172.16.64.199 ansible_port=22 ansible_user="root" ansible_ssh_pass="xxxx."
172.16.64.200 ansible_port=22 ansible_user="root" ansible_ssh_pass="xxxx."
172.16.64.201 ansible_port=22 ansible_user="root" ansible_ssh_pass="xxxx."
172.16.64.202 ansible_port=22 ansible_user="root" ansible_ssh_pass="xxxx."

; 私有云:
;    VIP 负载模式:
;       也就是负载均衡器 + keepalived 模式,比如常用的 haproxy + keepalived。
;       本脚本中负载均衡器有 nginx、openresty、haproxy、envoy 可供选择,设置 lb_mode 即可进行任意切换。
;       设置 lb_kube_apiserver_ip 即表示启用 keepalived,请先与服务器提供部门协商保留一个IP作为 lb_kube_apiserver_ip,
;       一般 lb 节点组中有两个节点就够了,lb节点组中第一个节点为 keepalived 的 master 节点,剩下的都为 backed 节点。
;
;    节点本地负载模式:
;       只启动负载均衡器,不启用 keepalived(即不设置 lb_kube_apiserver_ip),
;       此时 kubelet 链接 apiserver 地址为 127.0.0.1:lb_kube_apiserver_port。
;       使用此模式时请将 lb 节点组置空。
;
; 公有云:
;    不推荐使用 slb 模式,建议直接使用节点本地负载模式。
;    若使用 slb 模式,请先使用节点本地负载模式进行部署,
;    部署成功后再切换至 slb 模式:
;       将 lb_mode 修改为 slb,将 lb_kube_apiserver_ip 设置为购买到的 slb 内网ip,
;       修改 lb_kube_apiserver_port 为 slb 监听端口。
;    再次运行初始化集群脚本即可切换至 slb 模式。
[lb]

; 注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
172.16.64.199
172.16.64.200
172.16.64.201

[kube-master]
172.16.64.199

[kube-worker]
172.16.64.199
172.16.64.200
172.16.64.201
172.16.64.202


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

; 预留组,后续添加worker节点使用
[new-worker]

; 预留组,后续添加etcd节点使用
[new-etcd]

; 预留组,后续删除worker角色使用
[del-worker]

; 预留组,后续删除master角色使用
[del-master]

; 预留组,后续删除etcd角色使用
[del-etcd]

; 预留组,后续删除节点使用
[del-node]

;-------------------------------------- 以下为基础信息配置 ------------------------------------;
[all:vars]
; 是否跳过节点物理资源校验,Master节点要求2c2g以上,Worker节点要求2c4g以上
skip_verify_node=false
; kubernetes版本
kube_version="1.21.2"

; 容器运行时类型,可选项:containerd,docker;默认 containerd
; container_manager="containerd"

; 负载均衡器
;   有 nginx、openresty、haproxy、envoy  和 slb 可选,默认使用 nginx
lb_mode="openresty"
; 使用负载均衡后集群 apiserver ip,设置 lb_kube_apiserver_ip 变量,则启用负载均衡器 + keepalived
; lb_kube_apiserver_ip="192.168.56.15"
; 使用负载均衡后集群 apiserver port
lb_kube_apiserver_port="8443"

; 网段选择:pod 和 service 的网段不能与服务器网段重叠,
; 若有重叠请配置 `kube_pod_subnet` 和 `kube_service_subnet` 变量设置 pod 和 service 的网段,示例参考:
;    如果服务器网段为:10.0.0.1/8
;       pod 网段可设置为:192.168.0.0/18
;       service 网段可设置为 192.168.64.0/18
;    如果服务器网段为:172.16.0.1/12
;       pod 网段可设置为:10.244.0.0/18
;       service 网段可设置为 10.244.64.0/18
;    如果服务器网段为:192.168.0.1/16
;       pod 网段可设置为:10.244.0.0/18
;       service 网段可设置为 10.244.64.0/18
; 集群pod ip段,默认掩码位 18 即 16384 个ip
kube_pod_subnet="10.244.0.0/18"
; 集群service ip段
kube_service_subnet="10.244.64.0/18"
; 分配给节点的 pod 子网掩码位,默认为 24 即 256 个ip,故使用这些默认值可以纳管 16384/256=64 个节点。
kube_network_node_prefix="24"

; node节点最大 pod 数。数量与分配给节点的 pod 子网有关,ip 数应大于 pod 数。
; https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr
kube_max_pods="110"

; 集群网络插件,目前支持flannel,calico
network_plugin="calico"

; 若服务器磁盘分为系统盘与数据盘,请修改以下路径至数据盘自定义的目录。
; Kubelet 根目录
kubelet_root_dir="/mnt/system/kubelet"
; docker容器存储目录
docker_storage_dir="/mnt/system/docker"
; containerd容器存储目录
containerd_storage_dir="/mnt/system/containerd"
; Etcd 数据根目录
etcd_data_dir="/mnt/system/etcd"

注意:1.ip为内网IP

  1. 部署集群:
#在项目根目录下执行
ansible-playbook -i inventory.ini 90-init-cluster.yml
# 任意master节点下执行
kubectl get po --all-namespaces -w
如果部署失败,想要重置集群,执行:
# 在项目根目录下执行
ansible-playbook -i inventory.ini 99-reset-cluster.yml

部署完成:


image.png
  1. 测试
  • 集群访问公网测试
curl -o /dev/null -s -w '%{time_connect} %{time_starttransfer} %{time_total}' "choerodon.io"
  • Kubernetes集群node服务器访问公网
docker run -it --rm --net=host \
    registry.cn-hangzhou.aliyuncs.com/choerodon-tools/network-and-cluster-perfermance-test:0.1.0 \
    curls choerodon.io
image.png
  • Kubernetes集群Pod访问公网
  • docker安装
systemctl status docker
systemctl start docker
yum -y install docker
kubectl run curl-test \
    -it --quiet --rm --restart=Never \
    --image='registry.cn-hangzhou.aliyuncs.com/choerodon-tools/network-and-cluster-perfermance-test:0.1.0' \
    -- bash -c "sleep 3; curls choerodon.io"
image.png

相关文章

网友评论

      本文标题:K8S环境搭建

      本文链接:https://www.haomeiwen.com/subject/hkmvpltx.html