0%

利用 kubeadm 部署 Kubernetes v1.13.x

官方文档:https://kubernetes.io/docs/setup/independent/high-availability/

关闭防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

禁用selinux

1
2
3
# Set SELinux in permissive mode (effectively disabling it)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

启用net.bridge.bridge-nf-call-ip6tables和net.bridge.bridge-nf-call-iptables

1
2
3
4
5
6
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
sysctl --system

禁用swap

1
2
3
4
swapoff -a

修改/etc/fstab 文件,注释掉 SWAP 的自动挂载.
使用free -m确认swap已经关闭。

加载ipvs相关模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for i in $(ls $ipvs_mods_dir | grep -o "^[^.]*"); do
/sbin/modinfo -F filename $i &> /dev/null
if [ $? -eq 0 ]; then
/sbin/modprobe $i
fi
done
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上面脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。 使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。接下来还需要确保各个节点上已经安装了ipset软件包。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm。

1
yum install ipset ipvsadm -y

安装 docke

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-18.06*

# 增加加速器
tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://bv55mwyn.mirror.aliyuncs.com"]
}
EOF

# 启动docker
systemctl enable docker && systemctl start docker

安装kubeadm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 添加阿里云仓库
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 安装kubeadm
yum install -y kubelet-1.13.4 kubeadm-1.13.4 kubectl-1.13.4

# 启动kubectl
systemctl enable kubelet && systemctl start kubelet

部署master节点

注意这里执行初始化用到了- -image-repository选项,指定初始化需要的镜像源从阿里云镜像仓库拉取。
Kubenetes默认Registries地址是 k8s.gcr.io,在国内并不能访问 gcr.io,在1.13版本中我们可以增加–image-repository参数

1
2
3
4
kubeadm init \
--image-repository registry.cn-shenzhen.aliyuncs.com/hyman0603 \
--kubernetes-version v1.13.4 \
--pod-network-cidr=10.244.0.0/16

KUBE-代理使用IPVS转发

开启路由转发

1
2
3
4
cat >> /etc/sysctl.conf << EOF
net.ipv4.ip_forward=1
EOF
sysctl -p

修改ConfigMap的kube-system/kube-proxy中的config.conf

1
2
kubectl edit cm kube-proxy -n kube-system
# 39行 mode: "" -> mode: "ipvs"

重启所有工作节点的kube-proxy pod

1
kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'

查看是否生效

1
kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'

查看ipvs规则

1
ipvsadm -Ln