手记

kubernetes 容器云

组件版本

kubernetes v1.8.4

etcd v3.2.10

docker 17.09.0-ce

部署节点------x1 : 运行这份 ansible 脚本的节点

etcd节点------x3 : 注意etcd集群必须是1,3,5,7...奇数个节点

master节点----x2 : 根据实际集群规模可以增加节点数,需要额外规划一个master VIP(虚地址)

lb节点--------x2 : 负载均衡节点两个,安装 haproxy+keepalived

node节点------x3 : 真正应用负载的节点,根据需要增加机器配置和节点数


部署步骤

在每个节点安装依赖工具

mv /etc/yum.repos.d/backup/CentOS-* /etc/yum.repos.d/;rm -rf /etc/yum.repos.d/local.repo

yum clean all

yum install epel-release -y

yum update

wget -P /usr/bin/ http://192.168.12.57/zip/cni-docker-config; chmod a+x /usr/bin/cni-docker-config


在deploy节点安装准备ansible

yum install ansible -y

免密码登录配置(安装需要)

ssh-keygen -t rsa -b 2048

ssh-copy-id $nodes

删除默认ansible配置;

rm -rf /etc/ansible

wget -P /etc/ http://192.168.12.57/zip/ansible.zip;cd /etc;unzip /etc/ansible.zip

修改HOSTS文件

vim /etc/ansible/hosts

# 部署节点:运行这份 ansible 脚本的节点

[deploy]

192.168.100.24

# etcd集群请提供如下NODE_NAME、NODE_IP变量

# 请注意etcd集群必须是1,3,5,7...奇数个节点

[etcd]

192.168.100.24 NODE_NAME=etcd1 NODE_IP="192.168.100.24"

192.168.100.25 NODE_NAME=etcd2 NODE_IP="192.168.100.25"

192.168.100.26 NODE_NAME=etcd3 NODE_IP="192.168.100.26"

[kube-master]

192.168.100.24 NODE_IP="192.168.100.24"

192.168.100.25 NODE_IP="192.168.100.25"

# 负载均衡至少两个节点,安装 haproxy+keepalived

# 根据master节点数量同步修改roles/lb/templates/haproxy.cfg.j2

[lb]

192.168.100.24 LB_IF="br0" LB_ROLE=master

192.168.100.25 LB_IF="br0" LB_ROLE=backup

[lb:vars]

LB_EP1="192.168.100.24:6443"    # api-server 实际成员地址端口

LB_EP2="192.168.100.25:6443"    # api-server 实际成员地址端口

MASTER_IP="192.168.100.29"      # api-server 虚地址

MASTER_PORT="8443"              # api-server 服务端口

#确保node节点有变量NODE_ID=node1

[kube-node]

192.168.100.24 NODE_ID=node1 NODE_IP="192.168.100.24"

192.168.100.25 NODE_ID=node2 NODE_IP="192.168.100.25"

192.168.100.26 NODE_ID=node3 NODE_IP="192.168.100.26"

[kube-cluster:children]

kube-node

kube-master

# 如果启用harbor,请配置后面harbor相关参数

[harbor]

#192.168.1.8 NODE_IP="192.168.1.8"

# 预留组,后续添加node节点使用

[new-node]

#192.168.1.xx NODE_ID=node6 NODE_IP="192.168.1.xx"

#192.168.1.xx NODE_ID=node7 NODE_IP="192.168.1.xx"

[all:vars]

# ---------集群主要参数---------------

#集群 MASTER IP, 需要负载均衡,一般为VIP地址

MASTER_IP="192.168.100.29"

KUBE_APISERVER="https://192.168.100.29:8443"

#pause镜像地址

POD_INFRA_CONTAINER_IMAGE=mirrorgooglecontainers/pause-amd64:3.0

#TLS Bootstrapping 使用的 Token,使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成

BOOTSTRAP_TOKEN="c30302226d4b810e08731702d3890f50"

# 服务网段 (Service CIDR),部署前路由不可达,部署后集群内使用 IP:Port 可达

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."

# etcd 集群间通信的IP和端口, **根据实际 etcd 集群成员设置**

ETCD_NODES="etcd1=https://192.168.100.24:2380,etcd2=https://192.168.100.25:2380,etcd3=https://192.168.100.26:2380"

# etcd 集群服务地址列表, **根据实际 etcd 集群成员设置**

ETCD_ENDPOINTS="https://192.168.100.24:2379,https://192.168.100.25:2379,https://192.168.100.26:2379"

# 集群basic auth 使用的用户名和密码

BASIC_AUTH_USER="admin"

BASIC_AUTH_PASS="test1234"

# ---------附加参数--------------------

#默认二进制文件目录

bin_dir="/root/local/bin"

#证书目录

ca_dir="/etc/kubernetes/ssl"

#部署目录,即 ansible 工作目录,建议不要修改

base_dir="/etc/ansible"

#私有仓库 harbor服务器 (域名或者IP)

#HARBOR_IP="192.168.1.8"

#HARBOR_DOMAIN="harbor.yourdomain.com"

#ansible all -m ping 测试部署节点

ansible准备好之后在每台服务器上安装openvswitch

由于loadbalance的rip在K8Snode 的网桥上,所以需要先配置openvswitch才可以安装。

openvswitch部署

wget http://192.168.12.57/zip/openvswitch-2.5.0.tar.gz;tar -zxvf openvswitch-2.5.0.tar.gz;mkdir -p ~/rpmbuild/SOURCES;sed 's/openvswitch-kmod, //g' openvswitch-2.5.0/rhel/openvswitch.spec > openvswitch-2.5.0/rhel/openvswitch_no_kmod.spec;cp openvswitch-2.5.0.tar.gz rpmbuild/SOURCES;rpmbuild -bb --without=check ~/openvswitch-2.5.0/rhel/openvswitch_no_kmod.spec;yum localinstall rpmbuild/RPMS/x86_64/openvswitch-2.5.0-1.x86_64.rpm -y;


完成后使用命令创建网桥规范命名用br0

ovs-vsctl add-br br0

将网卡桥接入br0

ovs-vsctl add-port br0 eth0

开始从ansible安装k8s

cd /etc/ansible;ansible-playbook 90.setup.yml

完成后

kubectl get node 

会发现节点NotReady,日志提示/etc/cni/net.d/  NotFound

执行

wget -P /etc/cni/net.d/ http://192.168.12.57/zip/10-mynet.conf


cat 10-mynet.conf

{

    "cniVersion": "0.3.0",

    "name": "mynet",网络名称

    "type": "auto_ip",###容器分配IP插件  在/opt/cni/bin可以找到

    "bridge": "br0",##桥接网卡名称

    "etcd_endpoints":"https://192.168.103.24:2379",##etcd服务器地址

    "isDefaultGateway": true,

    "forceAddress": false,

    "ipMasq": true,

    "hairpinMode": true,

    "ipam": {

        "type": "host-local",##默认地址/opt/bin/cni

        "subnet": "192.168.100.0/22",  ##子网掩码

        "rangeStart":"192.168.100.31",##节点网段IP地址起始地址(每台机一个地址段)

        "rangeEnd":"192.168.102.2",##节点网段IP地址结束地址

        "gateway":"192.168.103.254"##网关

    }

}


配置/opt/cni/bin

cd /opt/

wget http://192.168.12.57/zip/cni.zip;unzip cni.zip

在master上修改配置文件/etc/haproxy.cfg, 可以listen新增proxyIP

listen kube-master

        bind 0.0.0.0:8443

        mode tcp

        option tcplog

        balance source

        server s1 192.168.102.1:6443  check inter 10000 fall 2 rise 2 weight 1

        server s2 192.168.102.2:6443  check inter 10000 fall 2 rise 2 weight 1

执行 ln -s /root/local/bin/docker /bin/docker (如果cni-docker-config找不到docker命令的话)



作者:LeoYJ
链接:https://www.jianshu.com/p/d82eb569f21b


0人推荐
随时随地看视频
慕课网APP