使用Kubespray部署你的第一个Kubernetes集群
Kubespray是一个基于Ansible的Kubernetes部署工具,它简化了Kubernetes集群的安装和配置过程。本文将详细介绍如何使用Kubespray在云环境中部署一个生产可用的Kubernetes集群。
准备工作
在开始部署前,我们需要做好以下准备工作:
- 云平台账号:本文以Google Cloud Platform为例,你需要一个GCP账号和项目
- 命令行工具:安装并配置好gcloud和kubectl工具
- Python环境:确保本地有Python 3环境
- SSH密钥:准备好用于节点访问的SSH密钥
基础设施准备
网络规划
Kubernetes需要一个平坦的网络环境,我们首先创建VPC网络和子网:
gcloud compute networks create kubernetes-cluster --subnet-mode custom
gcloud compute networks subnets create kubernetes \
--network kubernetes-cluster \
--range 10.240.0.0/24
防火墙规则
为集群配置必要的防火墙规则:
# 允许内部通信
gcloud compute firewall-rules create kubernetes-allow-internal \
--allow tcp,udp,icmp,vxlan \
--network kubernetes-cluster \
--source-ranges 10.240.0.0/24
# 允许外部访问
gcloud compute firewall-rules create kubernetes-allow-external \
--allow tcp:80,tcp:6443,tcp:443,tcp:22,icmp \
--network kubernetes-cluster \
--source-ranges 0.0.0.0/0
创建计算实例
创建3个控制平面节点和3个工作节点:
# 控制平面节点
for i in 0 1 2; do
gcloud compute instances create controller-${i} \
--boot-disk-size 200GB \
--image-family ubuntu-1804-lts \
--machine-type e2-standard-2 \
--private-network-ip 10.240.0.1${i} \
--subnet kubernetes \
--tags kubernetes-cluster,controller
done
# 工作节点
for i in 0 1 2; do
gcloud compute instances create worker-${i} \
--boot-disk-size 200GB \
--image-family ubuntu-1804-lts \
--machine-type e2-standard-2 \
--private-network-ip 10.240.0.2${i} \
--subnet kubernetes \
--tags kubernetes-cluster,worker
done
配置Kubespray
环境准备
创建Python虚拟环境并安装依赖:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
配置Inventory文件
复制示例inventory并修改:
cp -rfp inventory/sample inventory/mycluster
编辑inventory/mycluster/inventory.ini
文件,将节点按角色分组:
[all]
controller-0 ansible_host=10.240.0.10 ip=10.240.0.10
controller-1 ansible_host=10.240.0.11 ip=10.240.0.11
controller-2 ansible_host=10.240.0.12 ip=10.240.0.12
worker-0 ansible_host=10.240.0.20 ip=10.240.0.20
worker-1 ansible_host=10.240.0.21 ip=10.240.0.21
worker-2 ansible_host=10.240.0.22 ip=10.240.0.22
[kube_control_plane]
controller-0
controller-1
controller-2
[kube_node]
worker-0
worker-1
worker-2
集群配置
修改inventory/mycluster/group_vars/k8s_cluster/k8s_cluster.yml
:
supplementary_addresses_in_ssl_keys:
- "35.205.205.80" # 替换为你的控制节点外部IP
kube_network_plugin: calico
启用Metrics Server:
# inventory/mycluster/group_vars/k8s_cluster/addons.yml
metrics_server_enabled: true
部署集群
运行Ansible playbook部署集群:
ansible-playbook -i inventory/mycluster/ -u $USERNAME -b -v --private-key=~/.ssh/id_rsa cluster.yml
部署过程大约需要20分钟,具体时间取决于网络状况和节点配置。
访问集群
获取kubeconfig
从控制节点获取kubeconfig文件:
scp $USERNAME@$CONTROLLER_0_IP:/etc/kubernetes/admin.conf kubespray.conf
修改kubeconfig中的API服务器地址为外部IP:
apiVersion: v1
clusters:
- cluster:
server: https://35.205.205.80:6443 # 替换为控制节点外部IP
设置环境变量使用该配置文件:
export KUBECONFIG=$PWD/kubespray.conf
验证集群状态:
kubectl get nodes
集群验证
基础功能测试
-
Metrics Server:
kubectl top nodes
-
网络连通性:
kubectl run test-1 -it --rm --image busybox -- sh # 在另一个终端 kubectl run test-2 -it --rm --image busybox -- sh # 互相ping测试
-
部署测试:
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port 80 --type NodePort
服务暴露测试
获取NodePort并创建防火墙规则:
NODE_PORT=$(kubectl get svc nginx --output=jsonpath='{range .spec.ports[0]}{.nodePort}')
gcloud compute firewall-rules create allow-nginx \
--allow=tcp:${NODE_PORT} \
--network kubernetes-cluster
访问Nginx服务:
curl http://$WORKER_EXTERNAL_IP:$NODE_PORT
总结
通过本文,我们完成了以下工作:
- 在云平台上规划并创建了Kubernetes集群所需的基础设施
- 使用Kubespray自动化工具部署了一个高可用的Kubernetes集群
- 验证了集群的各项基本功能
- 测试了应用部署和服务暴露能力
Kubespray大大简化了Kubernetes集群的部署复杂度,特别适合需要快速搭建生产级集群的场景。通过合理的配置,你可以轻松扩展集群规模或调整集群配置。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考