用k8s开启一个NGINX服务
目录层级关系
/opt/nginx/
├── deployment.yaml
└── service.yaml
/opt/namespaces
└──namespaces.yaml
文件位置根据个人爱好放置,文件位置不固定,后期部署能找到就行
先创建命名空间namespaces.yaml
apiVersion: v1
kind: Namespace
metadata:
name: nginx
kubectl apply -f namespaces.yaml
创建deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: nginx
spec:
replicas: 1 # 副本数量
selector:
matchLabels:
app: nginx # 匹配 Pod 的标签
template:
metadata:
labels:
app: nginx # Pod 的标签
spec:
containers:
- name: nginx
image: nginx:latest # 使用的 NGINX 镜像
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi" # 最小内存需求
cpu: "250m" # 最小 CPU 需求
limits:
memory: "128Mi" # 最大内存限制
cpu: "500m" # 最大 CPU 限制
yaml文件规范
- 确保使用空格进行缩进,并且缩进一致。
- 键值对使用冒号和空格分隔。
- 列表项使用连字符和空格表示。
- 字符串通常不需要引号,除非包含特殊字符。
- 多行字符串使用
|
或>
表示。- 使用 # 添加注释。
service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: nginx
spec:
selector:
app: nginx # 选择标签为 app: nginx 的 Pod
ports:
- protocol: TCP
port: 80 # 服务端口
targetPort: 80 # Pod 内部端口
nodePort: 31532 # 节点的端口
type: NodePort # 使用 NodePort 类型暴露服务
为什么要用deloyment和service两个文件创建pod
Deployment
- 目的:用于管理和部署应用的多个副本。
- 功能:确保指定数量的 Pod 副本处于运行状态,提供滚动更新、回滚等功能。
- 特点:负责 Pod 的创建、更新和管理,但不直接暴露 Pod。
Service
- 目的:提供稳定的网络访问,并将请求路由到合适的 Pod。
- 功能:定义一个稳定的 IP 地址和 DNS 名称,以便其他应用可以稳定地访问服务;负责负载均衡和服务发现。
- 特点:抽象 Pod 的 IP 地址变化,提供单一的访问入口。
为什么需要 Service
Pod 的 IP 地址不稳定:Pod 在创建或删除后,其 IP 地址会发生变化。如果直接依赖 Pod 的 IP 地址,访问方式会不稳定。
负载均衡:Service 提供负载均衡,将流量分配到多个 Pod 上,提高应用的可用性和性能。
服务发现:Service 提供稳定的 DNS 名称,方便其他应用通过该名称访问服务,而不用关心背后具体的 Pod。
Deployment 负责管理应用实例的生命周期,但不提供稳定的网络访问。Service 提供稳定的网络入口和负载均衡。将 Deployment 和 Service 结合使用,可以确保应用的高可用性、稳定性和可访问性。
应用 YAML 文件
cd到配置文件的目录里
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
验证部署和服务
查看 Pod 状态:
kubectl get pods -n nginx
如果查看pod状态一直是“ImagePullBackOff ”、“Terminating”、“pending”这些状态,可以试试更换Docker 镜像加速器
配置方法
将以下内容添加到
/etc/docker/daemon.json
文件中(没有就手动创建一个),并重启 Docker 服务请替换
<your-region>
为您所在的阿里云镜像加速区域,如cn-shanghai
、cn-beijing
等添加完成后最好docker pull 任意镜像,测试镜像站能否被使用
更换完镜像站点后重新执行一下
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
{
"registry-mirrors": ["https://<your-region>.mirror.aliyuncs.com"]
}
查看服务状态:
kubectl get services -n nginx
通过 NodePort 访问 NGINX 服务:
http://<node-ip>:<node-port>
其中,
<node-ip>
是你的集群node节点 IP,<node-port>
是由 Kubernetes 分配的 NodePort 端口。
更多推荐
所有评论(0)