1.使用三台机器进行部署 IP分别为
172.17.13.204
172.17.13.205
172.17.13.202
2.三台机器分别设置,注意一定要每台机器都配置
a.设置hostname
vim /etc/hostname 分别设置hostname
sudo hostnamectl set-hostname kube-node1
sudo hostnamectl set-hostname kube-node2
sudo hostnamectl set-hostname kube-node3
b.设置hosts
vim /etc/hosts
172.17.13.204 kube-node1
172.17.13.205 kube-node2
172.17.13.202 kube-node3
注:vim shift+g最后一行 shift+0最后一个字母
c.为了减少用户切换、授权操作,全部使用root用户操作
如果需要需要定义用户,可以参考下面定义k8s用户,后续操作都用定义的用户操作
sudo useradd -m k8s
sudo sh -c 'echo 123456 | passwd k8s --stdin' # 为 k8s 账户设置密码
sudo gpasswd -a k8s wheel
sudo useradd -m docker
sudo gpasswd -a k8s docker
d.每台机器配置环境变量
vim /etc/profile
# 生成 EncryptionConfig 所需的加密 key
ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
# 最好使用 当前未用的网段 来定义服务网段和 Pod 网段
# 服务网段,部署前路由不可达,部署后集群内路由可达(kube-proxy 和 ipvs 保证)
SERVICE_CIDR="10.254.0.0/16"
# Pod 网段,建议 /16 段地址,部署前路由不可达,部署后集群内路由可达(flanneld 保证)
CLUSTER_CIDR="172.30.0.0/16"
# 服务端口范围 (NodePort Range)
export NODE_PORT_RANGE="8400-9000"
# 集群各机器 IP 数组
export NODE_IPS=(172.17.13.204 172.17.13.205 172.17.13.202)
# 集群各 IP 对应的 主机名数组
export NODE_NAMES=(kube-node1 kube-node2 kube-node3)
# kube-apiserver 的 VIP(HA 组件 keepalived 发布的 IP)
export MASTER_VIP=172.17.13.253
# kube-apiserver VIP 地址(HA 组件 haproxy 监听 8443 端口)
# export KUBE_APISERVER="https://${MASTER_VIP}:8443"
# 由于阿里云ECS不支持浮动IP havip也已经下线 暂不使用keepalived 和 haproxy做高可用负载 使用阿里负载均衡
export KUBE_APISERVER="https://172.17.13.204:6443"
# HA 节点,VIP 所在的网络接口名称
export VIP_IF="eth0"
# etcd 集群服务地址列表
export ETCD_ENDPOINTS="https://172.17.13.204:2379,https://172.17.13.205:2379,https://172.17.13.202:2379"
# etcd 集群间通信的 IP 和端口
export ETCD_NODES="kube-node1=https://172.17.13.204:2380,kube-node2=https://172.17.13.205:2380,kube-node3=https://172.17.13.202:2380"
# flanneld 网络配置前缀
export FLANNEL_ETCD_PREFIX="/kubernetes/network"
# kubernetes 服务 IP (一般是 SERVICE_CIDR 中第一个IP)
export CLUSTER_KUBERNETES_SVC_IP="10.254.0.1"
# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
export CLUSTER_DNS_SVC_IP="10.254.0.2"
# 集群 DNS 域名
export CLUSTER_DNS_DOMAIN="cluster.local."
# 将二进制目录 /opt/k8s/bin 加到 PATH 中
export PATH=/opt/k8s/bin:$PATH
source /etc/profile
e.添加docker帐号,并配置daemon.json
sudo useradd -m docker
sudo gpasswd -a k8s docker
sudo mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"],
"max-concurrent-downloads": 20
}
EOF
f.设置ssh密码,自动登录
ssh-keygen -t rsa 直接回车
[k8s@kube-node1 k8s]$ ssh-keygen -t rsa
输入各个主机root用户密码
[k8s@kube-node1 k8s]$ ssh-copy-id root@kube-node1
[k8s@kube-node1 k8s]$ ssh-copy-id root@kube-node2
[k8s@kube-node1 k8s]$ ssh-copy-id root@kube-node3
输入刚创建的k8s用户密码
[k8s@kube-node1 k8s]$ ssh-copy-id k8s@kube-node1
[k8s@kube-node1 k8s]$ ssh-copy-id k8s@kube-node2
[k8s@kube-node1 k8s]$ ssh-copy-id k8s@kube-node3
g.在每台机器上安装依赖包
sudo yum install -y epel-release
sudo yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
h.关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
sudo sudo iptables -P FORWARD ACCEPT
i.关闭 swap 分区
如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为 false 来忽略 swap on),故需要在每台机器上关闭 swap 分区:
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
j.确认关闭SELinux
sudo setenforce 0
grep SELINUX /etc/selinux/config
k.确认关闭dnsmasq
sudo service dnsmasq stop
sudo systemctl disable dnsmasq
l.创建文件 kubernetes.conf
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF
拷贝并执行命令
sudo mv kubernetes.conf /etc/sysctl.d/kubernetes.conf
sudo sysctl -p /etc/sysctl.d/kubernetes.conf
sudo mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct
m.加载内核模块
sudo modprobe br_netfilter
sudo modprobe ip_vs
n.设置系统时区
# 调整系统 TimeZone
# 将当前的 UTC 时间写入硬件时钟
# 重启依赖于系统时间的服务
sudo timedatectl set-timezone Asia/Shanghai
sudo timedatectl set-local-rtc 0
sudo systemctl restart crond
o.创建目录
sudo mkdir -p /opt/k8s/bin
sudo mkdir -p /etc/kubernetes/cert
sudo mkdir -p /etc/etcd/cert
sudo mkdir -p /var/lib/etcd