k8s部署服务流程

流程

在这里插入图片描述
上图是交给了jekins由流水线创建完成,但是基本的文件还是需要手工完成的:代码,dockerFile,k8s-yaml

整个流程如下:

代码完成----->打包------>制作docker镜像------->k8s创建并部署yaml服务------>k8s控制器管理pod------->暴露应用------->对外发布应用------->日志监控

手动部署

  • 运行环境镜像:安装java,maven,mysql环境
    检测是否安装成功并能够使用:
    在k8s节点测试mysql能否连上
    安装mysql client
    mysql -h主机名 -u用户 -p密码 //登录测试

  • db数据库表结构生成
    生成数据库:将源码中的一个db目录下sql文件导入数据库
    使用maven编译jar包
    [root@master tomcat-java-demo-master]# mvn clean package -Dmaven.test.skip=true

  • 构建镜像
    [root@master tomcat-java-demo-master]# docker build -t 镜像名 Dockerfile
    构建完镜像之后最好把镜像推送到harbor远程厂库中,为了集中管理镜像,node节点直接登录厂库就可以在构建项目是直接下载。

  • 开始部署k8s服务
    生成项目yaml文件
    [root@master yaml]# kubectl create deployment 名字 --image=镜像名 --dry-run(测试但不会执行) -o yaml > yaml文件名
    生成svc yaml文件
    [root@master yaml]# kubectl expose deployment 名字 --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run > svc.yaml
    注意
    名字与生成项目中yaml名字一样
    –port端口为集群内部访问端口
    –target-port=8080 容器里端口
    –type=NodePort 随机生成端口 集群外部访问端口

  • 查看pod和svc
    [root@master yaml]# kubectl get po,svc
    NAME READY STATUS RESTARTS AGE
    pod/java-demo-74b7db8f98-54zq8 1/1 Running 0 115m
    pod/java-demo-74b7db8f98-bklnq 1/1 Running 0 115m
    pod/java-demo-74b7db8f98-ffkbj 1/1 Running 0 115m
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/java-demo NodePort 10.106.9.105 80:30534/TCP 86m
    service/kubernetes ClusterIP 10.96.0.1 443/TCP 40d

登录web界面检查服务是否起来了:
http://nodeip:NodePor

<think> 我们正在讨论Kubernetes(k8s)中部署服务的命令。根据用户需求,我们需要提供在Kubernetes中部署服务时常用的命令。 在Kubernetes中,部署服务通常涉及以下几个步骤: 1. 创建Deployment(部署)资源:用于部署应用程序的Pod副本。 2. 创建Service(服务)资源:用于暴露Deployment,使得应用程序可以被访问。 常用的命令如下: 1. 创建资源(Deployment、Service等): ```bash kubectl apply -f <配置文件> ``` 例如,如果有一个名为`deployment.yaml`的配置文件,则命令为: ```bash kubectl apply -f deployment.yaml ``` 2. 查看资源状态: - 查看Deployment: ```bash kubectl get deployments ``` - 查看Service: ```bash kubectl get services ``` - 查看Pod: ```bash kubectl get pods ``` 3. 暴露Deployment(创建Service): - 使用命令行直接创建Service来暴露Deployment: ```bash kubectl expose deployment <deployment名称> --type=<服务类型> --port=<端口号> ``` 其中,`<服务类型>`可以是`ClusterIP`(默认)、`NodePort`、`LoadBalancer`等。 例如,将名为`my-app`的deployment暴露为NodePort类型的服务,端口为80: ```bash kubectl expose deployment my-app --type=NodePort --port=80 ``` 4. 更新部署: 当配置文件修改后,重新应用配置文件: ```bash kubectl apply -f <配置文件> ``` 5. 删除资源: ```bash kubectl delete -f <配置文件> ``` 或者通过指定资源类型和名称删除: ```bash kubectl delete deployment <deployment名称> kubectl delete service <service名称> ``` 6. 查看部署的详细信息: ```bash kubectl describe deployment <deployment名称> kubectl describe service <service名称> ``` 7. 查看Pod日志(用于调试): ```bash kubectl logs <pod名称> ``` 8. 进入Pod中的容器(用于调试): ```bash kubectl exec -it <pod名称> -- /bin/bash ``` 注意:在实际使用中,通常我们会编写YAML配置文件来定义Deployment和Service,然后使用`kubectl apply`命令来创建或更新资源。 例如,一个简单的Deployment配置文件(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:1.14.2 ports: - containerPort: 80 ``` 一个Service配置文件(service.yaml)可能如下: ```yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort ``` 然后,我们可以分别应用这两个配置文件: ```bash kubectl apply -f deployment.yaml kubectl apply -f service.yaml ``` 这样,我们就部署了一个具有3个副本的Nginx应用,并通过NodePort类型的Service暴露了服务。 以上就是在Kubernetes中部署服务时常用的命令和步骤。 相关问题: 1. 如何编写Kubernetes的Deployment配置文件? 2. Kubernetes的Service类型有哪些?它们之间有什么区别? 3. 如何扩展Kubernetes部署的副本数量? 4. 如何更新Kubernetes中的容器镜像? </think> 在 Kubernetes (K8s) 中部署服务主要涉及以下核心命令和操作步骤: ### 1. 核心部署命令 ```bash # 应用YAML配置文件创建资源(常用) kubectl apply -f <配置文件.yaml> # 示例:部署Deployment和Service kubectl apply -f deployment.yaml kubectl apply -f service.yaml ``` ### 2. 部署流程与关键命令 #### (1) 创建部署(Deployment) ```bash # 创建Deployment(使用配置文件) kubectl create deployment <部署名> --image=<容器镜像> -o yaml > deployment.yaml kubectl apply -f deployment.yaml # 直接创建Deployment(简单场景) kubectl create deployment nginx --image=nginx:1.23 ``` #### (2) 暴露服务(Service) ```bash # 将Deployment暴露为Service kubectl expose deployment <部署名> \ --port=<服务端口> \ --target-port=<容器端口> \ --type=<服务类型> # ClusterIP/NodePort/LoadBalancer # 示例:创建NodePort服务 kubectl expose deployment nginx --port=80 --type=NodePort ``` #### (3) 验证部署状态 ```bash # 查看Deployment状态 kubectl get deployments # 查看Pod运行状态 kubectl get pods -o wide # 查看Service配置 kubectl get services # 查看详细描述 kubectl describe deployment <部署名> ``` ### 3. 配置文件示例 #### 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:1.23 ports: - containerPort: 80 ``` #### service.yaml ```yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort # 外部可访问 ``` ### 4. 管理命令 ```bash # 扩展副本数量 kubectl scale deployment <部署名> --replicas=5 # 滚动更新镜像 kubectl set image deployment/<部署名> <容器名>=<新镜像>:<版本> # 删除部署 kubectl delete deployment <部署名> kubectl delete service <服务名> ``` ### 5. 调试命令 ```bash # 查看Pod日志 kubectl logs <pod名称> # 进入Pod容器 kubectl exec -it <pod名称> -- /bin/bash # 查看集群事件 kubectl get events --sort-by=.metadata.creationTimestamp ``` > **最佳实践**:推荐使用声明式配置(YAML文件)进行部署,便于版本控制和重复部署[^2]。本地测试时可使用 `minikube` 或 `kind` 搭建集群[^1],生产环境建议使用托管服务如 GKE/EKS/AKS[^4]。 --- ### 相关问题 1. Kubernetes 中 Deployment 和 StatefulSet 有什么区别? 2. 如何配置 Kubernetes 服务的网络策略? 3. Kubernetes 的 ConfigMap 和 Secret 如何使用? 4. 如何实现 Kubernetes 的自动扩缩容(HPA)?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值