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
共同学习,写下你的评论
评论加载中...
作者其他优质文章