K8S-Demo集群实践02:准备VMware虚拟机3台Master+3台Node
一、克隆虚拟机
- 需要关闭虚拟机模板,shutdown -h now
二、设置虚拟机的IP和主机名
- 主机名配置文件 /etc/hostname,每台主机不一样
- IP配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33,IP设置为192.168.66.10~15
- 主机名解析 /etc/hosts
- node节点的名字中不能有.(点),一开始配置为node1.demo,结果在后面遇到错误:
bootstrapTokens.0.groups: Invalid value: []string{“system:bootstrappers:”}: bootstrap group “system:bootstrappers:” is invalid (must match \Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\z)
- /etc/hosts 内容如下
192.168.66.10 master1
192.168.66.11 master2
192.168.66.12 master3
192.168.66.13 node1
192.168.66.14 node2
192.168.66.15 node3
192.168.66.106 harbor.demo # 容器镜像仓库域名
三、设置免密登录
- 这个仅在master1上设置
- 从master1 到其它节点免密登录,其它节点之间登录或者其它节点登录master1还是需要密码
- master1登录自己也要设置免密登录,为了后面执行脚本方便
[root@master1 ~]# ssh-keygen -t rsa
[root@master1 ~]# ssh-copy-id root@master1
[root@master1 ~]# ssh-copy-id root@master2
[root@master1 ~]# ssh-copy-id root@master3
[root@master1 ~]# ssh-copy-id root@node1
[root@master1 ~]# ssh-copy-id root@node2
[root@master1 ~]# ssh-copy-id root@node3
四、环境变量设置
- 目录说明
- 安装脚本和下载软件包存放目录 /opt/install
- 运行 /opt/k8s
- 配置文件存放目录 /opt/k8s/etc
- 网络说明
- 宿主机网络(虚拟机网路)192.168.66.0/24
- Pod网络 172.8.0.0/16
- 服务网络 10.8.0.0/16
- 环境变量设置脚本: /opt/k8s/etc/setenv.sh
#!/usr/bin/bash
# 集群各机器IP数组
export MASTER_IPS=(192.168.66.10 192.168.66.11 192.168.66.12)
export NODE_IPS=(192.168.66.13 192.168.66.14 192.168.66.15)
export ALL_IPS=(${MASTER_IPS[@]} ${NODE_IPS[*]})
# 集群各IP对应的主机名数组
export MASTER_NAMES=(master1 master2 master3)
export NODE_NAMES=(node1 node2 node3)
export ALL_NAMES=(${MASTER_NAMES[@]} ${NODE_NAMES[*]})
# ETCD集群服务地址列表
export ETCD_ENDPOINTS="https://192.168.66.10:2379,https://192.168.66.11:2379,https://192.168.66.12:2379"
# ETCD集群间通信的IP和端口
export ETCD_NODES="master1=https://192.168.66.10:2380,master2=https://192.168.66.11:2380,master3=https://192.168.66.12:2380"
# kube-apiserver的反向代理地址端口,kube-nginx实现
export KUBE_APISERVER="https://127.0.0.1:8443"
# 节点间互联网络接口名称
export IFACE="ens33"
# ETCD数据目录
export ETCD_DATA_DIR="/opt/k8s/etcd/data"
# ETCD WAL目录,建议是SSD磁盘分区,或者和ETCD_DATA_DIR不同的磁盘分区
export ETCD_WAL_DIR="/opt/k8s/etcd/wal"
# K8S各组件数据目录
export K8S_DIR="/opt/k8s"
# 最好使用当前未用的网段来定义服务网段和Pod网段
# 服务网段,部署前路由不可达,部署后集群内路由可达
export SERVICE_CIDR="10.8.0.0/16"
# Pod网段,建议/16段地址,部署前路由不可达,部署后集群内路由可达
export CLUSTER_CIDR="172.8.0.0/16"
# 服务端口范围
export NODE_PORT_RANGE="30000-32767"
# kubernetes服务IP(一般是SERVICE_CIDR中第一个IP)
export CLUSTER_KUBERNETES_SVC_IP="10.8.0.1"
# 集群DNS服务IP(从SERVICE_CIDR中预分配)
export CLUSTER_DNS_SVC_IP="10.8.0.2"
# 集群DNS域名(末尾不带点号)
export CLUSTER_DNS_DOMAIN="cluster.demo"
# 将二进制目录/opt/k8s/bin加到PATH中
export PATH=/opt/k8s/bin:$PATH
export PATH=/opt/k8s/kube-nginx/sbin:$PATH
-
k8s-demo使用节点本地 nginx 4层透明代理实现kube-apiserver高可用
-
如果不考虑kube-apiserver高可用,只在master1节点上操作,则KUBE_APISERVER环境变量改为https://192.168.66.10:6443
-
把 setenv.sh 放到 ~/.bashrc 文件中,如下所示
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# add by Jason@vip.qq.com 20201225
source /opt/k8s/etc/setenv.sh
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
附:K8s-Demo集群版本信息
组件 | 版本 | 命令 |
---|---|---|
kubernetes | 1.18.5 | kubectl version |
docker-ce | 19.03.11 | docker version 或者 rpm -qa | grep docker |
etcd | 3.4.3 | etcdctl version |
calico | 3.13.3 | calico -v |
coredns | 1.7.0 | coredns -version |
附:专栏链接
K8S-Demo集群实践00:搭建镜像仓库Harbor+安全扫描
K8S-Demo集群实践01:准备VMware虚拟机模板
K8S-Demo集群实践02:准备VMware虚拟机3台Master+3台Node
K8S-Demo集群实践03:准备集群各组件间HTTPS通讯需要的x509证书
K8S-Demo集群实践04:部署etcd三节点高可用集群
K8S-Demo集群实践05:安装kubectl并配置集群管理员账户
K8S-Demo集群实践06:部署kube-apiserver到master节点(3个无状态实例)
K8S-Demo集群实践07:kube-apiserver高可用方案
K8S-Demo集群实践08:部署高可用kube-controller-manager集群
K8S-Demo集群实践09:部署高可用kube-scheduler集群
K8S-Demo集群实践10:部署ipvs模式的kube-proxy组件
K8S-Demo集群实践11:部署ipvs模式的kube-kubelet组件
K8S-Demo集群实践12:部署Calico网络
K8S-Demo集群实践13:部署集群CoreDNS
K8S-Demo集群实践14:部署集群监控服务Metrics Server
K8S-Demo集群实践15:部署Kubernetes Dashboard
K8S-Demo集群实践16:部署Kube-Prometheus
K8S-Demo集群实践17:部署私有云盘owncloud(10.6版本)
K8S-Demo集群实践18:构建宇宙中第一个基础容器镜像
- 先用起来,通过操作实践认识k8s,积累多了自然就理解了
- 把理解的知识分享出来,自造福田,自得福缘
- 追求简单,容易使人理解
- 知识的上下文也是知识的一部分,例如版本,时间等
- Jason@vip.qq.com 2021-1-17。