AWS EC2上部署k8s v1.33(保姆级教程,亲测可用!)
前言
因公司转型需要,项目上云,特采用最流行的k8s,但是市面上教程多而杂,且版本不一定是最新的,自己在学习的过程中也踩了很多坑,最终结合k8s官方文档,成功地部署了k8s集群,将步骤整理完成后分享给大家,希望可以和大家共同学习。
本教程中,云服务器商采用的是aws,其他的云服务商可能在包管理器上等方面有些许差异,但是部署过程大差不差。
创建控制面节点
创建AWS EC2实例
选择实例类型
根据官方文档说明,至少选取2核2G内存以上的实例类型,根据个人实际情况进行选取
选择操作系统
我这里选择了Amazon Linux 2023 AMI,大家可以根据自己实际情况选取
创建安全组
根据官方文档说明,创建安全组,开放对应的端口
安装容器运行时
进入超级管理员模式
# 进入超级管理员模式,方便后续操作
sudo -s
根据官方文档说明,执行如下脚本,如果出现是否mv覆盖,输入yes然后回车即可
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <
安装kubeadm
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 此操作会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置
cat <
生成kubeadm配置文件
获取内外IP
输入
ifconfig
再确认主机所在网段,以避免calico网段和主机网段重复
# 查看主机所在网段
ifconfig | grep "inet "
输出如下
计算结果不做讨论,可将结果丢给AI去解析,图中可得主机所在网段为192.168.0.0/19,calico的默认网段为192.168.0.0/16,包含了192.168.0.0/19,因此需要更改
# 在 /etc下建立k8s目录
mkdir /etc/k8s
# 进入该目录
cd /etc/k8s
# 使用kubeadm创建默认配置文件
kubeadm config print init-defaults > kubeadm-config.yaml
# 修改该文件
vim kubeadm-config.yaml
# 示例
podSubnet: 10.244.0.0/16
下载镜像
输入如下命令下载镜像
kubeadm config images pull --config /etc/k8s/kubeadm-config.yaml
初始化集群
输入如下命令
kubeadm init --config /etc/k8s/kubeadm-config.yaml --upload-certs
等待初始化完成,如图
记录工作节点的加入命令,如果忘记了也没关系,可以在控制面节点输入如下命令来打印出加入命令
kubeadm token create --print-join-command
加载配置文件
ls /etc/kubernetes/admin.conf # 确认文件存在
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config # 修正权限
export KUBECONFIG=/etc/kubernetes/admin.conf
安装helm
因为后续的网络插件和Dashboard都是通过helm安装
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
在控制面节点添加网络插件
我们选取calico作为网络插件,根据官方文档说明
Tutorial: Quickstart on Kubernetes | Calico Documentation
依次执行如下命令
# 进入超级管理员模式
sudo -s
# 创建calico自定义配置文件
cd /etc/k8s
# bpfConnectTimeLoadBalancing = Disabled是为了能够后续能够顺利安装istio组件
cat > values.yaml <
判断安装完成
# 使用以下命令检查 Tigera 状态
kubectl get tigerastatus
如果所有组件显示 AVAILABLE: True
,PROGRESSING: False
,DEGRADED: False
,则表示 Calico 已正确安装,如下图所示
# 检查 Calico 节点 Pod 是否正常运行
kubectl get pods -l k8s-app=calico-node -A
所有 Pod 应该显示为 Running
状态,如下图所示
# 检查 Tigera 操作员是否运行
kubectl get pod -n tigera-operator
在calico对应的pod都创建完成后,所有节点的status变为Ready
验证coreDNS解析正常
# 通过临时 Pod 测试 DNS 解析
kubectl run -it --rm --image=busybox:1.28 --restart=Never dns-test -- sh
输入对应的DNS解析即可,如下图
添加工作节点
端口开放方面有差别,官方文档说明如下
安装kubeadm,步骤同创建控制面节点
输入刚刚控制面节点上面的join命令,等待其加入完成
在控制面节点输入如下命令来确认工作节点是否加入完成
sudo kubectl get nodes
如下图所示
重置coreDNS
根据官方文档说明
在控制面节点上输入
kubectl -n kube-system rollout restart deployment coredns
安装Dashboard
根据官方参考文档
部署和访问 Kubernetes 仪表板(Dashboard) | Kubernetes
如果想在控制面节点上安装,需要将控制面节点的污点移除(可选,不推荐)
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
在控制面节点上输入如下安装命令
# 添加 kubernetes-dashboard 仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
# 使用 kubernetes-dashboard Chart 部署名为 `kubernetes-dashboard` 的 Helm Release
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
判断安装完成
kubectl get pods --namespace kubernetes-dashboard
所有Pod都处在running状态即可,如下图
等待pod都部署完成后,输入如下命令,以便可以通过控制面节点的公有IP+端口访问
nohup kubectl -n kubernetes-dashboard port-forward --address 0.0.0.0 svc/kubernetes-dashboard-kong-proxy 8443:443 > port-forward.log 2>&1 &
在浏览器输入 https://公有ip:8443访问Dashboard
创建示例用户
根据官方文档说明
dashboard/docs/user/access-control/creating-sample-user.md 在 master ·kubernetes/dashboard (英语) ·GitHub的
分别执行如下命令
# 进入k8s的配置文件目录
cd /etc/k8s
# 创建示例用户配置文件
cat > sa-admin-user.yaml < crb-admin-user.yaml <
输入token后,进入Dashboard
高级设置
以下设置并不是k8s必须设置的,按需使用
设置存储类
如果使用aws提供的ebs.csi.aws.com,需要先让集群所在节点拥有aws权限
为你所在的集群的节点关联IAM角色,该角色需拥有如下权限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateVolume",
"ec2:AttachVolume",
"ec2:DeleteVolume",
"ec2:DetachVolume",
"ec2:DescribeVolumes"
],
"Resource": "*"
}
]
}
然后在控制面节点上输入如下代码来安装对应驱动
# 添加 AWS EBS CSI Helm 仓库
helm repo add aws-ebs-csi-driver https://kubernetes-sigs.github.io/aws-ebs-csi-driver
helm repo update
# 安装驱动(替换 YOUR_AWS_REGION 为集群区域)
helm install aws-ebs-csi-driver aws-ebs-csi-driver/aws-ebs-csi-driver
--namespace kube-system
--set controller.serviceAccount.create=true
--set region=YOUR_AWS_REGION
安装Kafka
# 使用Bitnami Helm图表简化部署,注意,aws-ebs-standard这里要替换成你自己的存储类
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install kafka bitnami/kafka -n alpha-ai
--set persistence.storageClass=aws-ebs-standard
--set replicaCount=3
--set auth.clientProtocol=plaintext
卸载Kafka
helm uninstall kafka -n alpha-ai