ansible 二进制安装 k8s

一、基础集群环境搭建

  • k8s基础集群环境主要是运行kubernetes管理端服务以及node节点上的服务部署及使用
  • Kubernetes设计架构: https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84
  • CNCF 云原生容器生态系统概要
    http://dockone.io/article/3006

1.1 k8s高可用集群环境规划信息

安装实际需求,进行规划与部署相应的单 master 或者多 master 的高可用k8s运行环境。

1.1.1 单 master

1.1.2 多 master

1.1.3 服务器统计

类型 服务器IP地址 备注
Ansible(2台) 192.168.7.101/102 K8S集群部署服务器,可以和在一起
K8S Master(2台) 192.168.7.101/102 K8s控制端,通过一个 VIP 做主备高可用
Harbor(2台) 192.168.7.103/104 高可用镜像服务器
Etcd(最少3台) 192.168.7.105/106/107 保存k8s集群数据的服务器
Hproxy(2台) 192.168.7.108/109 高可用etcd代理服务器
Node节点(2-N台) 192.168.7.111/112/xxx 真正运行容器的服务器,高可用环境至少两台

1.2 主机名设置

由于资源限制,本次部署如下,全部为 Ubuntu 18.04 系统

类型 服务器 IP 主机名
K8S Master1、etcd节点1 192.168.7.101 k8s-master1.net
K8S Master2、etcd节点2 192.168.7.102 k8s-master2.net
K8S Master3、etcd节点3 192.168.7.103 k8s-master3.net
Node节点1 192.168.7.104 k8s-node1.net
Node节点2 192.168.7.105 k8s-node2.net
Node节点3 192.168.7.106 k8s-node3.net
Haproxy、Harbor 192.168.7.107 k8s-harbor.net

1.3:软件清单

端口:192.168.7.200:6443 # 需要配置在负载均衡上实现反向代理,dashboard 的端口为 8443
操作系统:ubuntu server 1804
k8s版本: 1.19.6
calico:3.4.4
flannel: 0.13.0

1.4 基础环境准备

系统主机名配置、IP配置、系统参数优化,以及依赖的负载均衡和 Harbor 部署

1.4.1 系统配置

hostnamectl set-hostname 主机名 # 修改各个主机名
vim /etc/hosts # 修改 host
192.168.7.101 k8s-master1.net
192.168.7.102 k8s-master2.net
192.168.7.103 k8s-master3.net
192.168.7.104 k8s-node1.net
192.168.7.105 k8s-node2.net
192.168.7.106 k8s-node3.net
192.168.7.107 harbor.linux.net

vim /etc/sysctl.conf # 资源限制
vim /etc/security/limits.conf # 内核参数

1.4.2 负载均衡

部署 keepalived

apt install keepalived # 安装
cp /usr/share/doc/keepalived/samples/keepalived.conf.vrrp /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf # 配置
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.7.200 dev eth0 label eth0:1
    }
}

systemctl restart keepalived.service

部署 haproxy

apt install haproxy # 安装
vim /etc/haproxy/haproxy.cfg # 配置
listen stats
  mode http
  bind 0.0.0.0:9999
  stats enable
  log global
  stats uri /haproxy-status
  stats auth haadmin:123456

listen k8s-6443
  bind 192.168.7.200:6443
  mode tcp
  balance roundrobin
  server 192.168.7.101 192.168.7.101:6443 check inter 2s fall 3 rise 5
  server 192.168.7.102 192.168.7.102:6443 check inter 2s fall 3 rise 5

systemctl restart haproxy.service

1.4.3 部署 harbor

# docker 安装脚本
#!/bin/bash
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装 GPG 证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce=5:19.03.15~3-0~ubuntu-bionic docker-ce-cli=5:19.03.15~3-0~ubuntu-bionic

# apt-cache madison docker-ce 查看版本
# 安装 docker
bash docker-install.sh

# 安装 docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

# 安装 harbor
wget https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-offline-installer-v2.1.3.tgz
tar xvf harbor-offline-installer-v2.1.3.tgz

cp harbor.yml.tmpl harbor.yml
vim harbor.yml # 修改配置文件 注释https
hostname: 192.168.7.107
harbor_admin_password: 123456!

./install.sh # 安装

补充 harbor https 配置

高版本(14以上)docker执行login命令,默认使用https,且harbor必须使用域名,只是用ip访问是不行的。

# 创建自己的CA证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

# 在 /data/cert 目录下操作生成证书,供harbor.yml使用
mkdir -p /data/cert
cd /data/cert

openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=example/OU=Personal/CN=harbor.linux.net" -key ca.key -out ca.crt

openssl genrsa -out harbor-ca.key 4096

openssl req -sha512 -new -subj "/C=CN/ST=Shanghai/L=Shanghai/O=example/OU=Personal/CN=harbor.linux.net" -key harbor-ca.key -out harbor-ca.csr

<root@k8s-harbor cert>#openssl x509 -req -sha512 -days 3650 -CA ca.crt -CAkey ca.key -CAcreateserial -in harbor-ca.csr -out harbor-ca.crt
Signature ok
subject=C = CN, ST = Shanghai, L = Shanghai, O = example, OU = Personal, CN = harbor.linux.net
Getting CA Private Key

openssl x509 -inform PEM -in harbor-ca.crt -out harbor-ca.cert

# 添加 hosts 文件中
echo "192.168.7.107 harbor.linux.net" >> /etc/hosts

# 修改 harbor.yml
vim /usr/local/harbor/harbor.yml
https:
#   # https port for harbor, default is 443
  port: 443
#   # The path of cert and key files for nginx
  certificate: /data/cert/harbor-ca.crt
  private_key: /data/cert/harbor-ca.key

# 重新生成配置
cd /usr/local/harbor/
docker-compose down -v
./prepare
docker-compose up -d

# 拷贝证书
cd /data/cert
scp harbor-ca.crt  192.168.7.101:/etc/docker/certs.d/harbor.linux.net/harbor-ca.crt

<root@ubuntu181 ~>#docker login harbor.linux.net
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

二、ansible部署

参考:https://github.com/easzlab/kubeasz

2.1 基础环境准备

# 每个节点安装 python2
apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y
apt-get install python2.7 -y
# Ubuntu 可能需要配置以下软连接
ln -s /usr/bin/python2.7 /usr/bin/python

# ansible 节点
apt-get install git ansible -y
ssh-keygen #生成密钥对
apt-get install sshpass # ssh 同步公钥到各 k8s 服务器

# 分发公钥脚本:cat scp.sh
#!/bin/bash
#目标主机列表
IP="
192.168.7.101
192.168.7.102
192.168.7.103
192.168.7.104
192.168.7.105
192.168.7.106
"

for node in {IP};do
  sshpass -p 123456 ssh-copy-id{node} -o StrictHostKeyChecking=no
  if [ ? -eq 0 ];then
    echo "{node} 秘钥copy完成"
  else
    echo "{node} 秘钥copy失败"
  fi
done


# 同步docker证书脚本:
#!/bin/bash
#目标主机列表
IP="
192.168.7.101
192.168.7.102
192.168.7.103
192.168.7.104
192.168.7.105
192.168.7.106
"
for node in{IP};do
  sshpass -p 123456 ssh-copy-id {node} -o StrictHostKeyChecking=no
  if [? -eq 0 ];then
    echo "{node} 秘钥copy完成"
    echo "{node} 秘钥copy完成,准备环境初始化....."
    ssh {node} "mkdir /etc/docker/certs.d/harbor.linux.net -p" && echo "Harbor 证书目录创建成功!"
    scp /data/cert/harbor-ca.crt{node}:/etc/docker/certs.d/harbor.linux.net/harbor-ca.crt && echo "Harbor 证书拷贝成功!"
    scp  /etc/hosts {node}:/etc/hosts && echo "host 文件拷贝完成"
    scp -r /root/.docker{node}:/root/ && echo "Harbor 认证文件拷贝完成!"
    scp -r /etc/resolv.conf {node}:/etc/
  else
    echo "{node} 秘钥copy失败"
  fi
done

# 执行脚本同步:
bash scp.sh

# 取消vim 自动缩进功能
vim ~/.vimrc 
set paste                                                                       
set ignorecase
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
        if expand("%:e") == 'sh'
        call setline(1,"#!/bin/bash")
        call setline(2,"#")
        call setline(3,"#********************************************************************")
        call setline(4,"#Author:                kong")
        call setline(5,"#Date:                  ".strftime("%Y-%m-%d"))
        call setline(6,"#FileName:             ".expand("%"))
        call setline(7,"#Email:                 test@163.com")
        call setline(8,"#********************************************************************")
        call setline(9,"")
        endif
endfunc

2.2 安装依赖工具

在一台能够访问互联网的服务器上执行

# 安装节点下载工具脚本ezdown,使用 kubeasz 版本3.0.1
export release=3.0.1
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown

# 查看帮助
<root@k8s-master1 data>#./ezdown --help
./ezdown: illegal option -- -
Usage: ezdown [options] [args]
  option: -{DdekSz}
    -C         stop&clean all local containers
    -D         download all into "/etc/kubeasz"
    -P         download system packages for offline installing
    -S         start kubeasz in a container
    -d <ver>   set docker-ce version, default "19.03.14"
    -e <ver>   set kubeasz-ext-bin version, default "0.8.1"
    -k <ver>   set kubeasz-k8s-bin version, default "v1.20.2"
    -m <str>   set docker registry mirrors, default "CN"(used in Mainland,China)
    -p <ver>   set kubeasz-sys-pkg version, default "0.3.3"
    -z <ver>   set kubeasz version, default "3.0.0"

# 使用工具脚本下载,指定 k8s 版本为 v1.19.6
chmod +x ./ezdown
./ezdown -D -k v1.19.6

# 上述脚本运行成功后,所有文件(kubeasz代码、二进制、离线镜像)均已整理好放入目录 /etc/kubeasz
docker images # 查看镜像
<root@ubuntu181 ~>#docker images
REPOSITORY                                    TAG             IMAGE ID       CREATED         SIZE
easzlab/kubeasz                               3.0.1           f231a0548dee   8 days ago      353MB
easzlab/nfs-subdir-external-provisioner       v4.0.1          686d3731280a   3 weeks ago     43.8MB
kubernetesui/dashboard                        v2.2.0          5c4ee6ca42ce   6 weeks ago     225MB
easzlab/kubeasz-k8s-bin                       v1.19.6         aab9677d588b   3 months ago    462MB
easzlab/kubeasz-ext-bin                       0.8.1           e5471f766400   3 months ago    373MB
easzlab/k8s-dns-node-cache                    1.16.0          90f9d984ec9a   5 months ago    121MB
kubernetesui/metrics-scraper                  v1.0.6          48d79e554db6   5 months ago    34.5MB
easzlab/flannel                               v0.13.0-amd64   e708f4bb69e3   5 months ago    57.2MB
coredns/coredns                               1.7.1           0a6cfbf7b0b6   6 months ago    42.4MB
calico/node                                   v3.15.3         d45bf977dfbf   6 months ago    262MB
calico/pod2daemon-flexvol                     v3.15.3         963564fb95ed   6 months ago    22.8MB
calico/cni                                    v3.15.3         ca5564c06ea0   6 months ago    110MB
calico/kube-controllers                       v3.15.3         0cb2976cbb7d   6 months ago    52.9MB
easzlab/pause-amd64                           3.2             80d28bedfe5d   13 months ago   683kB
mirrorgooglecontainers/metrics-server-amd64   v0.3.6          9dd718864ce6   17 months ago   39.9MB

2.3 在部署节点编排k8s安装

2.3.1 创建集群配置实例

cd /etc/kubeasz
<root@k8s-master1 kubeasz>#./ezctl new k8s-01
2021-03-21 21:56:18 DEBUG generate custom cluster files in /etc/kubeasz/clusters/k8s-01
2021-03-21 21:56:18 DEBUG set version of common plugins
2021-03-21 21:56:18 DEBUG cluster k8s-01: files successfully created.
2021-03-21 21:56:18 INFO next steps 1: to config '/etc/kubeasz/clusters/k8s-01/hosts'
2021-03-21 21:56:18 INFO next steps 2: to config '/etc/kubeasz/clusters/k8s-01/config.yml'

2.3.2 配置 hosts 与 config

  • 根据上述提示配置’/etc/kubeasz/clusters/k8s-01/hosts’ 和 ‘/etc/kubeasz/clusters/k8s-01/config.yml’,根据前面节点规划修改hosts 文件和其他集群层面的主要配置选项;其他集群组件等配置项可以在config.yml 文件中修改

配置 hosts 文件

vim /etc/kubeasz/clusters/k8s-01/hosts # 修改 hosts
# tcd集群请提供如下NODE_NAME,注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
192.168.7.102
# 192.168.7.101
# 192.168.7.103

# master node(s)
[kube_master]
192.168.7.101
192.168.7.102

# work node(s)
[kube_node]
192.168.7.104
192.168.7.105

# 参数 NEW_INSTALL:yes表示新建,no表示使用已有harbor服务器
[harbor]
#192.168.1.8 NEW_INSTALL=false

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

# chrony 时间同步
[chrony]
#192.168.1.1

[all:vars]
# --------- 集群主要参数 ---------------
# Cluster container-runtime supported: docker, containerd
CONTAINER_RUNTIME="docker"

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

# Service proxy mode of kube-proxy: 'iptables' or 'ipvs'
PROXY_MODE="ipvs"

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

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

# 服务端口范围 (NodePort Range)
NODE_PORT_RANGE="30000-32767"

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

# -------- 附加参数 (don't change the default value right now) ---
# Binaries Directory
bin_dir="/opt/kube/bin"

# Deploy Directory (kubeasz workspace)
base_dir="/etc/kubeasz"

# Directory for a specific cluster
cluster_dir="{{ base_dir }}/clusters/_cluster_name_"

# CA and other components cert/key Directory
ca_dir="/etc/kubernetes/ssl"

ansible all -m ping # 测试

配置 config.yml 文件

主要包括集群某个具体组件的个性化配置,具体组件的配置项可能会不断增加;

*   可以在不做任何配置更改情况下使用默认值创建集群
*   可以根据实际需要配置 k8s 集群,常用举例
    *   配置使用离线安装系统包:INSTALL_SOURCE: "offline" (需要ezdown -P 下载离线系统软件)
    *   配置集群节点安全加固:OS_HARDEN: true
    *   配置CA证书以及其签发证书的有效期
    *   配置 docker 国内镜像加速:ENABLE_MIRROR_REGISTRY: true
    *   配置 docker 容器存储目录:DOCKER_STORAGE_DIR: "/var/lib/docker"
    *   配置 apiserver 支持公网域名:MASTER_CERT_HOSTS
    *   配置 cluster-addon 组件安装

2.5 按步骤部署

  • 部署前测试:ansible all -i /etc/kubeasz/clusters/k8s-01/hosts -m ping
  • 查看分步安装帮助信息
<root@k8s-master1 kubeasz>#./ezctl help setup
Usage: ezctl setup <cluster> <step>
available steps:
    01     prepare         to prepare CA/certs & kubeconfig & other system settings 
    02     etcd            to setup the etcd cluster
    03     runtime         to setup the container runtime(docker or containerd)
    04     kube-master     to setup the master nodes
    05     kube-node       to setup the worker nodes
    06     network         to setup the network plugin
    07     cluster-addon   to setup other useful plugins
    all                    to run 01~07 all at once

examples: ./ezctl setup test-k8s 01
          ./ezctl setup test-k8s 02
          ./ezctl setup test-k8s all

2.5.1 环境初始化

  • 执行操作:./ezctl setup k8s-01 01
  • 说明
# 包含角色:os-harden、chrony、deploy、prepare,其中 os-harden、chrony 暂不执行

# deploy 角色包含
  1. 创建 CA 证书
  2. 生成配置文件等
    kube-controller-manager.kubeconfig
    kubectl.kubeconfig
    kube-proxy.kubeconfig
    kube-scheduler.kubeconfig

  3. ansible 控制端写入环境变量PATH 及添加 kubectl 自动补全

# prepare 角色包含
    1. 优化设置 journal 日志
    2. 禁用系统 swap
    3. 设置系统参数与ulimits
    4. 写入环境变量PATH
    5. 添加 kubectl 命令自动补全
    6. 分发配置文件等

2.5.2 部署 etcd 集群

  • 由于资源限制,本次只部署单节点 192.168.7.102
  • 执行操作:./ezctl setup k8s-01 02
  • 说明
# 角色 etcd 包含
  1. 创建 etcd 证书 并分发相关文件
  2. 创建 etcd 的 systemd unit 文件
  3. 开机启用 etcd 服务并设置开机自启

# 在etcd 节点验证
systemctl status etcd # 查看服务状态
journalctl -u etcd # 查看运行日志
# 在任一 etcd 集群节点上执行如下命令
根据hosts中配置设置shell变量 NODE_IPS
export NODE_IPS="192.168.1.1 192.168.1.2 192.168.1.3"
for ip in{NODE_IPS}; do
  ETCDCTL_API=3 etcdctl \
  --endpoints=https://${ip}:2379  \
  --cacert=/etc/kubernetes/ssl/ca.pem \
  --cert=/etc/kubernetes/ssl/etcd.pem \
  --key=/etc/kubernetes/ssl/etcd-key.pem \
  endpoint health; done

https://192.168.7.102:2379 is healthy: successfully committed proposal: took = 8.328368ms

2.5.3 安装容器运行时

  • 本次使用docker, 目前k8s官方推荐使用containerd
  • 执行操作:./ezctl setup k8s-01 03
  • 说明
# 角色 dcoker 包含
  1. 创建 docker 的 systemd unit 文件
  2. 配置 daemon.json
  3. 清理 iptables
  4. 启动 docker 服务并设置开机自启

# 可选-安装docker查询镜像 tag的小工具
# docker官方没有提供在命令行直接查询某个镜像的tag信息的方式,可以使用一个工具脚本
<root@ubuntu182 ~>#docker-tag --help

docker-tag  --  list all tags for a Docker image on a remote registry

EXAMPLE:
    - list all tags for ubuntu:
       docker-tag tags ubuntu

    - list all php tags containing apache:
       docker-tag tags php apache

    - list all images of harbor:
       docker-tag get_images

    - list all tags for harbor redis:
       docker-tag get_tags redis/redis

# 验证
systemctl status docker     # 服务状态
journalctl -u docker         # 运行日志
docker version
docker info

iptables-save|grep FORWARD # 查看 iptables filter表 FORWARD链

2.5.4 安装 kube_master

  • 执行操作:./ezctl setup k8s-01 04
  • 说明
# 部署master节点主要包含三个组件apiserver、scheduler、controller-manager
# 角色 kube_master 包含
  1. 创建 kubernetes 证书签名请求
  2. 创建apiserver的服务配置文件
  3. 创建controller-manager 的服务文件
  4. 创建scheduler 的服务文件
  5. 在master 节点安装 node 服务: kubelet kube-proxy
    (1) 项目master 分支使用 DaemonSet 方式安装网络插件,如果master 节点不安装 kubelet 服务是无法安装网络插件的,如果 master 节点不安装网络插件,那么通过apiserver 方式无法访问 dashboard kibana等管理界面
    (2) 在master 节点也同时成为 node 节点后,默认业务 POD也会调度到 master节点,多主模式下这显然增加了 master节点的负载,因此可以使用 kubectl cordon命令禁止业务 POD调度到 master节点

# 高可用机制
  apiserver 无状态服务,可以通过外部负责均衡实现高可用,如项目采用的两种高可用架构:HA-1x (#584)和 HA-2x (#585)
  controller-manager 组件启动时会进行类似选举(leader);当多副本存在时,如果原先leader挂掉,那么会选举出新的leader,从而保证高可用;
  scheduler 类似选举机制

# 验证
# 查看进程状态
systemctl status kube-apiserver
systemctl status kube-controller-manager
systemctl status kube-scheduler
# 查看进程运行日志
journalctl -u kube-apiserver
journalctl -u kube-controller-manager
journalctl -u kube-scheduler

2.5.4 安装 kube-node

  • 执行操作:./ezctl setup k8s-01 05
  • kube_node 是集群中运行工作负载的节点,前置条件需要先部署好kube_master节点,它需要部署如下组件:
    • kubelet: kube_node上最主要的组件
    • kube-proxy: 发布应用服务与负载均衡
    • haproxy:用于请求转发到多个 apiserver,详见HA-2x 架构
    • calico: 配置容器网络 (或者其他网络组件)
  • 说明
# 角色 kube_master 包含
1. 创建 cni 基础网络插件配置文件
2. 创建 kubelet 的服务文件
3. 创建 kube-proxy kubeconfig 文件
  该步骤已经在 deploy节点完成,roles/deploy/tasks/main.yml
4. 创建 kube-proxy服务文件

# 验证 node 状态
systemctl status kubelet    # 查看状态
systemctl status kube-proxy
journalctl -u kubelet        # 查看日志
journalctl -u kube-proxy

kubectl get node

2.5.5 安装 flannel 网络组件

  • 首先回顾下 K8S 网络设计原则,在配置集群网络插件或者实践 K8S 应用/服务部署请时刻想到这些原则:
    • 1.每个Pod都拥有一个独立IP地址,Pod内所有容器共享一个网络命名空间
    • 2.集群内所有Pod都在一个直接连通的扁平网络中,可通过 IP 直接访问
      • 所有容器之间无需 NAT 就可以直接互相访问
      • 所有 Node 和所有容器之间无需 NAT 就可以直接互相访问
      • 容器自己看到的 IP 跟其他容器看到的一样
    • 3.Service cluster IP 尽可在集群内部访问,外部请求需要通过NodePort、LoadBalance或者Ingress来访问
  • Container Network Interface (CNI)是目前CNCF主推的网络模型,它由两部分组成:
    • CNI Plugin负责给容器配置网络,它包括两个基本的接口
      • 配置网络: AddNetwork(net *NetworkConfig, rt *RuntimeConf) (types.Result, error)
      • 清理网络: DelNetwork(net *NetworkConfig, rt *RuntimeConf) error
    • IPAM Plugin负责给容器分配IP地址
  • Kubernetes Pod的网络是这样创建的:
    • 0.每个Pod除了创建时指定的容器外,都有一个kubelet启动时指定的基础容器,比如:easzlab/pause-amd64 registry.access.redhat.com/rhel7/pod-infrastructure
    • 1.首先 kubelet创建基础容器生成network namespace
    • 2.然后 kubelet调用网络CNI driver,由它根据配置调用具体的CNI 插件
    • 3.然后 CNI 插件给基础容器配置网络
    • 4.最后 Pod 中其他的容器共享使用基础容器的网络
  • 本项目基于CNI driver 调用各种网络插件来配置kubernetes的网络,常用CNI插件有 flannel calico weave等等,这些插件各有优势,也在互相借鉴学习优点,比如:在所有node节点都在一个二层网络时候,flannel提供hostgw实现,避免vxlan实现的udp封装开销,估计是目前最高效的;calico也针对L3 Fabric,推出了IPinIP的选项,利用了GRE隧道封装;因此这些插件都能适合很多实际应用场景。

  • 执行操作:./ezctl setup k8s-01 06
# 角色 kube_master 包含
1. 下载基础 cni 插件
2. 准备 Flannel DaemonSet yaml 配置文件
3. 安装 flannel网络

# 验证
# 执行flannel安装成功后可以验证如下:(需要等待镜像下载完成,有时候即便上一步已经配置了docker国内加速,还是可能比较慢,请确认以下容器运行起来以后,再执行后续验证步骤)
<root@ubuntu181 ~>#kubectl get pod --all-namespaces
NAMESPACE     NAME                          READY   STATUS    RESTARTS   AGE
kube-system   kube-flannel-ds-amd64-6r7f2   1/1     Running   0          3m32s
kube-system   kube-flannel-ds-amd64-k4c75   1/1     Running   0          3m32s
kube-system   kube-flannel-ds-amd64-sxdwf   1/1     Running   0          3m32s
kube-system   kube-flannel-ds-amd64-x68d4   1/1     Running   0          3m31s

2.5.6 部署集群插件

  • 此次只安装 coredns 和 dashboard,其他设置为 no
  • 执行操作:./ezctl setup k8s-01 07
*   根据hosts文件中配置的`CLUSTER_DNS_SVC_IP` `CLUSTER_DNS_DOMAIN`等参数生成kubedns.yaml和coredns.yaml文件
*   注册变量pod_info,pod_info用来判断现有集群是否已经运行各种插件
*   根据pod_info和`配置开关`逐个进行/跳过插件安装

# 验证
<root@ubuntu181 ~>#kubectl get pods --all-namespaces
NAMESPACE     NAME                                         READY   STATUS    RESTARTS   AGE
kube-system   coredns-5787695b7f-z7rkc                     1/1     Running   0          5m10s
kube-system   dashboard-metrics-scraper-79c5968bdc-dznx4   1/1     Running   0          3m34s
kube-system   kube-flannel-ds-amd64-6r7f2                  1/1     Running   2          14h
kube-system   kube-flannel-ds-amd64-k4c75                  1/1     Running   2          14h
kube-system   kube-flannel-ds-amd64-sxdwf                  1/1     Running   1          14h
kube-system   kube-flannel-ds-amd64-x68d4                  1/1     Running   2          14h
kube-system   kubernetes-dashboard-c4c6566d6-vndv7         1/1     Running   0          3m34s
kube-system   node-local-dns-8xlmx                         1/1     Running   0          5m10s
kube-system   node-local-dns-tdptd                         1/1     Running   0          5m10s
kube-system   node-local-dns-w7m9f                         1/1     Running   0          5m9s
kube-system   node-local-dns-w86jb                         1/1     Running   0          5m10s

2.6 一键安装

vim /etc/kubeasz/playbooks/01.prepare.yml
#  - ex_lb
#  - chrony

./ezctl setup k8s-01 all # 一键安装

# 验证
<root@k8s-master1 kubeasz>#kubectl get nodes
NAME            STATUS                     ROLES    AGE     VERSION
192.168.7.101   Ready,SchedulingDisabled   master   11m     v1.19.6
192.168.7.102   Ready,SchedulingDisabled   master   11m     v1.19.6
192.168.7.104   Ready                      node     9m12s   v1.19.6
192.168.7.105   Ready                      node     9m15s   v1.19.6

2.7 离线安装(暂无)

将 kubeasz 相关文件拷到其他节点
上述下载完成后,把/etc/kubeasz整个目录复制到目标离线服务器相同目录,然后在离线服务器上运行

cd /etc/kubeasz/
tar -czvf kubeasz3.tar.gz ./*
mkdir -m755 /etc/kubeasz # 目标服务器
for i in `seq 2 6`; do scp kubeasz3.tar.gz 192.168.7.10i:/etc/kubeasz/;echo "3 拷贝完成" ;done
tar xvf kubeasz3.tar.gz
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇