本文已参与「新人创作礼」活动,一起开启掘金创作之路
- 前面完成了虚拟机模板的内核参数优化和Docker安装
- 接下来在虚拟机模板上通过环境变量配置好集群的参数,并克隆6台虚拟机
- 修改每台虚拟机IP地址
一、统一环境变量(可以自己定义安装目录等)
-
环境变量脚本: /opt/k8s/etc/setenv.sh
在 ~/.bashrc 文件中添加一行 source /opt/k8s/etc/setenv.sh ,这样每次开机后环境变量都生效
-
目录说明
- 安装脚本和下载软件包存放目录 /opt/install
- 临时存放配置文件的目录 /opt/install/kubeconfig
- 临时存放服务启动脚本的目录 /opt/install/service
- k8s运行目录 /opt/k8s
- 配置文件存放目录 /opt/k8s/etc
- 证书目录 /opt/k8s/etc/certs
-
网络说明
- 宿主机网络(虚拟机网路)192.168.66.0/24
- Pod 网络 172.66.0.0/16
- 服务网络 10.66.0.0/16
-
setenv.sh 文件内容如下
#!/usr/bin/bash
# 集群名字,你可以个性化设置,在后续很多脚本中会用到,目的是方便理解配置信息之间的关系
export MY_K8S_NAME=JasonK8sDemo
# K8S 安装目录,可以自己设定,后续下载的可执行文件,临时文件等都存放在这个目录下
export K8S_DIR="/opt/${MY_K8S_NAME}/"
# K8S 证书目录
export K8S_CERT_DIR="${K8S_DIR}/etc/certs/"
# K8S 下载文件临时存放目录
export K8S_DOWNLOAD_DIR="${K8S_DIR}/download/"
# K8S 安装脚本生成临时文件的存放目录
export K8S_INST_DIR="${K8S_DIR}/install/"
# ETCD 数据目录
export ETCD_DATA_DIR="${K8S_DIR}/etcd/data"
# ETCD WAL目录,建议是SSD磁盘分区,或者和ETCD_DATA_DIR不同的磁盘分区
export ETCD_WAL_DIR="${K8S_DIR}/etcd/wal"
# 集群各机器IP数组
export MASTER_IPS=(192.168.66.131 192.168.66.132 192.168.66.133)
export NODE_IPS=(192.168.66.134 192.168.66.135 192.168.66.136)
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.131:2379,https://192.168.66.132:2379,https://192.168.66.133:2379"
# ETCD集群间通信的IP和端口
export ETCD_NODES="master1=https://192.168.66.131:2380,master2=https://192.168.66.132:2380,master3=https://192.168.66.133:2380"
# kube-apiserver的反向代理地址端口,kube-nginx实现
export KUBE_APISERVER="https://127.0.0.1:8443"
# 节点间互联网络接口名称
export IFACE="ens33"
# 服务网段,部署前路由不可达,部署后集群内路由可达
export SERVICE_CIDR="10.66.0.0/16"
# Pod网段,建议/16段地址,部署前路由不可达,部署后集群内路由可达
export CLUSTER_CIDR="172.66.0.0/16"
# 服务端口范围
export NODE_PORT_RANGE="30000-32767"
# kubernetes服务IP(一般是SERVICE_CIDR中第一个IP)
export CLUSTER_KUBERNETES_SVC_IP="10.66.0.1"
# 集群DNS服务IP(从SERVICE_CIDR中预分配)
export CLUSTER_DNS_SVC_IP="10.66.0.2"
# 集群DNS域名(末尾不带点号)
export CLUSTER_DNS_DOMAIN="cluster.k8sdemo"
# 将二进制可执行程序存放目录/opt/k8s/bin加到环境变量 PATH 中
export PATH=/opt/k8s/bin:$PATH
export PATH=/opt/k8s/kube-nginx/sbin:$PATH
-
k8sdemo使用节点本地 nginx 4层透明代理实现kube-apiserver高可用
-
如果不考虑kube-apiserver高可用,只在master1节点上操作,则KUBE_APISERVER环境变量改为https://192.168.66.131: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
二、克隆虚拟机
- 需要关闭虚拟机模板才可以克隆,shutdown -h now
三、配置虚拟机IP地址、并设置免密登录
- 6台虚拟机的IP地址
- 192.168.66.131 master1
- 192.168.66.132 master2
- 192.168.66.133 master3
- 192.168.66.134 node1
- 192.168.66.135 node2
- 192.168.66.136 node3
1、配置主机名:/etc/hostname
- 主机名中不能有点(.),例如:master.01,否则后续会遇到以下错误信息:
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)
2、配置IP地址,并重启网络服务
- 配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33
- 修改 IP 地址,GATEWAY=192.168.66.2 网关IP地址是在前一篇编辑 VMware虚拟网络时设置的
- 本案例6台虚拟机的IP地址为 192.168.66.131 ~ 136,你可以根据具体情况修改
- 生成本机 UUID (uuidgen ens33)替换原来的 UUID
- 重启网络服务
[root@master1 ~]# nmcli con
NAME UUID TYPE DEVICE
ens33 cb5f1fa7-0b28-4968-8025-98be5b0ee0e2 ethernet ens33
[root@master1 ~]# uuidgen ens33
4a887c31-30d4-4346-a58b-d8ec9272df54
[root@master1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.66.131
GATEWAY=192.168.66.2
NETMASK=255.255.255.0
DNS1=192.168.66.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=4a887c31-30d4-4346-a58b-d8ec9272df54
DEVICE=ens33
ONBOOT=yes
[root@master1 ~]# systemctl restart network.service
[root@master1 ~]# nmcli con
NAME UUID TYPE DEVICE
ens33 4a887c31-30d4-4346-a58b-d8ec9272df54 ethernet ens33
[root@master1 ~]#
- 远程登陆工具 MobaXterm 下载地址 mobaxterm.mobatek.net/download-ho…
- win10查看路由信息命令:route print
3、配置 /etc/hosts
192.168.66.130 harbor.demo # 容器镜像仓库域名
192.168.66.131 master1
192.168.66.132 master2
192.168.66.133 master3
192.168.66.134 node1
192.168.66.135 node2
192.168.66.136 node3
4、设置免密登陆
- 这个仅在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
- 先用起来,通过操作实践认识kubernetes(k8s),积累多了自然就理解了
- 把理解的知识分享出来,自造福田,自得福缘
- 追求简单,容易使人理解,知识的上下文也是知识的一部分,例如版本,时间等
- 欢迎留言交流,也可以提出问题,一般在周末回复和完善文档
- Jason@vip.qq.com 2022-3-31