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"

更多推荐