在阿里云上利用Kubeadm高效部署Kubernetes 1.18集群
1. 阿里云ECS选型与基础配置
在阿里云上部署Kubernetes集群的第一步是选择合适的ECS实例。我建议选择计算型实例规格,比如ecs.c6.large(2核4G)起步,生产环境建议至少3台相同配置的实例。实测发现,这种配置足够运行一个中小规模的Kubernetes集群,同时保持较好的性价比。
系统镜像推荐使用Ubuntu 18.04 LTS或20.04 LTS,这两个版本对Kubernetes 1.18的支持最完善。创建实例时需要注意几个关键点:
- 网络建议选择专有网络VPC,确保所有节点在同一个子网内
- 带宽按量付费模式下,临时设置为100Mbps可加速软件包下载
- 安全组需要放行6443(API Server)、2379-2380(etcd)等端口
我遇到过的一个典型坑是:阿里云默认的磁盘IO性能可能成为瓶颈。建议为每台ECS挂载高效云盘或SSD云盘,特别是master节点需要更好的磁盘性能来运行etcd。
2. 系统环境准备与调优
2.1 基础系统配置
首先在三台机器上执行这些基础配置(以master节点为例):
# 设置主机名
hostnamectl set-hostname master01
# 配置hosts文件
cat >> /etc/hosts <<EOF
172.24.88.146 master01
172.24.88.148 node01
172.24.88.147 node02
EOF
这里有个实用技巧:使用阿里云内网IP可以避免公网流量费用。我建议先完成内网互通测试:
ping node01
ping node02
2.2 内核参数优化
Kubernetes对Linux内核有些特殊要求,需要调整以下参数:
# 关闭swap
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
# 加载br_netfilter模块
modprobe br_netfilter
# 配置内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
我在实际部署中发现,阿里云的部分镜像默认启用了防火墙,需要确认状态:
# 检查并关闭防火墙
ufw status
systemctl stop ufw && systemctl disable ufw
3. 容器运行时与K8S组件安装
3.1 Docker安装与配置
使用阿里云镜像源加速Docker安装:
# 安装依赖
apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
# 设置阿里云Docker镜像源
add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 安装Docker
apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io
关键配置点在于修改Docker的cgroup驱动:
# 配置daemon.json
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://<你的阿里云镜像加速地址>.mirror.aliyuncs.com"],
"storage-driver": "overlay2"
}
EOF
systemctl restart docker
3.2 Kubeadm全家桶安装
配置阿里云Kubernetes镜像源:
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat >/etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
安装指定版本组件(1.18.20是个稳定版本):
apt-get update && apt-get install -y \
kubelet=1.18.20-00 \
kubeadm=1.18.20-00 \
kubectl=1.18.20-00
apt-mark hold kubelet kubeadm kubectl # 锁定版本
4. 集群初始化与节点加入
4.1 Master节点初始化
生成初始化配置文件模板:
kubeadm config print init-defaults > kubeadm-config.yaml
修改关键配置:
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "172.24.88.146" # 改为master内网IP
bindPort: 6443
imageRepository: "registry.aliyuncs.com/google_containers" # 使用阿里云镜像
nodeRegistration:
criSocket: "/var/run/dockershim.sock"
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
networking:
podSubnet: "192.168.0.0/16" # 为Calico网络插件准备
执行初始化命令:
kubeadm init --config=kubeadm-config.yaml
初始化成功后,按照提示配置kubectl:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
4.2 安装网络插件
使用Calico作为CNI插件:
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
验证master节点状态:
kubectl get nodes -w # 观察状态变为Ready
4.3 Worker节点加入集群
在worker节点执行master初始化成功后输出的join命令:
kubeadm join 172.24.88.146:6443 \
--token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:8009eeba6c73ad14380d3bbaf81f407660e887a12eefc6bfae12c6138afacd3b
在master节点验证节点加入状态:
kubectl get nodes
5. 生产环境优化建议
5.1 证书与token管理
默认token 24小时后会过期,建议创建永久token:
kubeadm token create --ttl 0
查看现有token列表:
kubeadm token list
5.2 集群高可用配置
生产环境建议配置多master节点实现高可用:
# 在第一个master初始化时添加控制平面标志
kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" \
--upload-certs
5.3 监控与日志方案
部署基础监控组件:
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico-monitoring.yaml
阿里云用户还可以直接使用阿里云容器服务的监控组件,与云监控无缝集成。我在实际项目中发现,合理配置资源请求和限制能显著提高集群稳定性:
# 示例Pod资源限制
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
更多推荐
所有评论(0)