K8S部署服务以及服务的暴露

基础命令:

1. 创建应用:
kubectl create deployment nginx-test --image=nginx
# 到远程仓库pull一个nginx的docker镜像
# 然后回创建一个名字为nginx-test的deployment
# 同时回创建一个pod

2. 查看pod:
kubectl get pods [-n namespace] [-A]
# 查看对应命名空间的 pod,默认命名空间是default
# -A 查看所有的pods

3. 查看deployment:
kubectl get deployment [-n namespace]
# 查看对应命名空间的 deployment,默认是default

4. 查看service:
kubectl get service [-n namespace]
# 查看对应命名空间的service

查看某个命名空间下的所有信息:
kubectl get all -n namespace

5. 暴露服务:
kubectl expose deployment nginx-test --port=80 [--type=NodePort]
# 暴露一个服务,K8S集群之间容器通信的端口是80,
# --type=NodePort,表示在集群部署的主机(所有主机)上开启一个随机的端口(默认30000~32767),暴露给外部使用, 可以通过 --nodePort指定一个固定的端口
# 执行这条命令之后才会产生一个 service
# 可以可以使用yaml文件的形式,创建服务之后直接暴露

6. 删除pod:
kubectl delete pod podName [-n namespace]
# 删除对应命名空间下名字为 podName的pod

7. 删除service:
kubectl delete service serviceName [-n namespace]
# 删除对应命名空间下名字为 serviceName的service

8. 删除:deployment
kubectl delete deployment deploymentName [-n namespace]
# 删除对应命名空间下名字为 deploymentName的deployment

# 删除某个命名空间下的所有内容
kubectl delete all all -n namespace

# 删除命名空间
kubectl delete  namespace name

9. 空部署测试:
kubectl create deployment 应用名 --image=镜像名 --dry-run=client [-o yaml > deploy.yaml ] 
# 不会真正的运行,会产生一个yaml文件

10. 通过yaml文件部署应用:
kubectl apply -f deploy.yaml
# apply 如果存在则更新,如果不存在则创建
# 推荐使用这种方式部署服务,自定义程度比较高

# create deployment默认是到配置的docker仓库pull镜像
# 如果使用本地镜像,需要修改deploy.yaml文件中的内容,如下
containers:
  - name: myweb
    image: myweb-image
    imagePullPolicy: Never		# 表示不到远程仓库拉取镜像

11. 编辑某个service
kubectl edit service kubernetes-dashboard -n kubernetes-dashboard

K8S集群中的三种端口:

1. nodePort:
集群提供给外部访问使用的端口。

2. port:
集群内部各个服务(容器)之间访问的端口,不提供给外部使用。

3. targetPort
容器自己的端口,这个端口一般和容器内部部署的应用端口相同,例如mysql 3306,nginx 80等等

K8S集群暴露服务的几种方式:

按照个人理解做了简单的描述,
https://blog.csdn.net/qq_21187515/article/details/112363072
感觉这个大佬写的很详细了

1. NodePort:
在集群的每一台机器上都开放一个端口,外部请求访问这个端口,然后转发个对应的pod

2. LoadBalancer
一般是需要云厂商提供的ip

3. Ingress:
可以理解成一个路由,访问对应的url时,ingress会将url解析成ip+端口

ingress-nginx暴露服务:

以暴露一个nginx服务为例子,

kubectl create deployment nginx --image=nginx		# 创建一个deploy
kubectl expose deployment nginx --port=80		# 暴露服务(创建一个service),这个端口在之后的rule.yaml中会用到,不需要指定--type=NodePort

在这里插入图片描述

安装ingress-nginx:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml

# 补充一下,修改一下deploy.yaml这个文件里面的镜像,
# 320行添加 hostNetwork: true,否则无法访问
# 323行,改为阿里云的镜像,不然可能会安装失败
# registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:版本号

kubectl apply -f deploy.yaml

在这里插入图片描述

编写一个简单的路由规则:
ingress-nginx-rule.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: k8s-ingress			# 自定义
spec:
  rules:
  - host: www.sda1-hacker.com		# 自定义路由
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: nginx     # service名字 kubectl get service可以查看
            port: 
              number: 80    # service端口 -- 集群内部的端口,在 expose命令中指明的port=80,kubectl get service可以查看
	
	
	创建一个ingress规则:
	kubectl apply -f ingress-nginx-rule.yaml

	kubectl get ingress	# 获取ingress信息
	kubectl delete ingress name # 删除对应的ingress

在这里插入图片描述

# 在hosts配置一下映射   192.168.157.138 www.sda1-hacker.com

在这里插入图片描述

通过ip+端口号无法访问	

在这里插入图片描述

ok了,
扩容和缩容,可以通过副本数来控制,执行 kubectl apply -f xxx.yml即可
关于新加入worknode的配置,要使用DaemonSet控制器,看到了大佬们写的内容,还有其它一些控制器,等用到了再做笔记

# K8S 五种控制器类型
# https://blog.csdn.net/weixin_45691464/article/details/106326605

参考:
k8s-(七)暴露服务的三种方式
ingress-nginx详解和部署方案

<think>嗯,用户想在Kubernetes上部署Nginx服务,我需要提供一个详细的指南。首先,我得回忆一下Kubernetes的基本概念,比如Deployment、Service这些资源类型。用户可能刚接触k8s,所以步骤需要清晰,从准备配置文件开始。 用户提供的引用里提到了Deployment和Service的配置,还有查看Pod状态的命令。我应该按照创建Deployment暴露Service、验证状态的顺序来组织步骤。注意要确保YAML文件的正确性,比如apiVersion和selector的匹配。 可能用户还需要知道如何访问部署好的Nginx,所以需要解释Service的类型,比如NodePort或者LoadBalancer。引用中有一个例子用了NodePort,端口是30080,这个可以作为示例。同时,要提醒用户根据实际环境调整,比如云环境可能用LoadBalancer。 验证部分,检查Pod、Deployment、Service的状态是关键。引用中的kubectl命令可以直接参考,比如kubectl get pods -n web,但可能需要说明命名空间是否要创建,或者默认使用default。 用户可能遇到的问题,比如镜像拉取失败、端口冲突,或者标签不匹配导致Service无法找到Pod。应该在注意事项里提到这些,帮助用户排查常见问题。 另外,用户可能需要扩展应用,比如调整副本数,可以用kubectl scale命令,这部分在优化或调整部署时有用,也应该包含进去。 最后,生成的相关问题要考虑用户后续可能的需求,比如如何配置Ingress或者持久化存储,这些是进阶使用,但可以作为相关问题引导用户深入学习。</think>### 分步指南:在 Kubernetes 上部署 Nginx 服务 #### 一、创建 Deployment 配置文件 1. 编写 `nginx-deployment.yaml` 文件: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 # 设置副本数量 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 ``` 2. 执行部署命令: ```bash kubectl apply -f nginx-deployment.yaml ``` 该操作会创建包含3个Nginx实例的Pod集群,通过Deployment控制器保证副本数量[^3]。 #### 二、创建 Service 暴露服务 1. 编写 `nginx-service.yaml` 文件: ```yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort # 或 LoadBalancer(云环境) ``` 2. 应用服务配置: ```bash kubectl apply -f nginx-service.yaml ``` 通过Service将Pod的80端口映射到集群节点的随机端口(默认范围30000-32767)[^2]。 #### 三、验证部署状态 1. 查看Pod运行状态: ```bash kubectl get pods -l app=nginx ``` 正常状态应显示: ``` NAME READY STATUS RESTARTS AGE nginx-deployment-5549666998-7b6xt 1/1 Running 0 5m nginx-deployment-5549666998-g6ncl 1/1 Running 0 5m nginx-deployment-5549666998-w5cdw 1/1 Running 0 5m ``` 2. 查看Service详细信息: ```bash kubectl get svc nginx-service ``` 输出示例: ``` NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service NodePort 10.96.58.201 <none> 80:30080/TCP 2m ``` #### 四、访问服务 1. 通过NodePort访问: ```bash curl http://<节点IP>:30080 ``` 2. 或通过临时端口转发: ```bash kubectl port-forward service/nginx-service 8080:80 ``` 访问 http://localhost:8080 即可看到Nginx欢迎页 #### 五、扩展应用(可选) 调整副本数量: ```bash kubectl scale deployment nginx-deployment --replicas=5 ``` ### 注意事项 1. 镜像版本:建议指定稳定版本如 `nginx:1.25` 替代 `latest` 2. 网络策略:若集群启用NetworkPolicy,需配置允许80端口流量 3. 资源配置:生产环境应添加resources限制: ```yaml resources: limits: memory: "256Mi" cpu: "500m" ``` ### 架构示意图 $$ \begin{array}{ccc} \text{Client} & \rightarrow & \text{NodePort (30080)} \\ & \downarrow & \\ \text{kube-proxy} & \rightsquigarrow & \text{Pod (80)} \\ & \downarrow & \\ \text{Service} & \leftrightsquigarrow & \text{Deployment} \\ \end{array} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值