使用kubectl部署

 参考学习视频及教程

 3.部署应用到集群_哔哩哔哩_bilibili

 🏭 部署应用到集群中 - K8S 教程

通过yaml文件使用镜像仓库中的镜像启动服务

(1).创建一个命名空间,形成一个独立运行环境以便隔离其他可能影响的东西

kubectl create namespace hello

(2).使用pod.yaml和svc.yaml文件启动项目,可以将内容放在同一个yaml文件里,中间用三个-隔开两部分内容,使用以下命令启动服务

kubectl apply -f xxx.yaml --namespace=xxx #有命名空间必须加

控制台显示如下示例内容即为成功!

deployment "xxx" created

service "xxx" created 

(3).linux上创建个目录存放创建的pod.yaml和svc.yaml文件

创建的pod.yaml内容如下:

apiVersion: apps/v1     #指定Api版本
kind: Deployment     #指定创建资源的角色/类型
metadata:                #资源的元数据/属性
  name: newhello      #资源名,必须唯一 # 部署名字
  namespace: hello 
spec:
  replicas: 1      #副本数量

  # 用来查找关联的 Pod,所有标签都匹配才行
  selector:        #选择器,通过它指定该控制器管理哪些pod
    matchLabels:     #labels匹配规则
      app: newhello

  # 定义 Pod 相关数据
  template:            #模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
      labels:
        app: newhello
    spec:
      nodeSelector:                        # 将 Pod 指定到某个节点运行
        zone05: xinmei05

      # 定义容器,可以多个
      containers:
      - name: newhello    #容器名
        image: 10.124.129.165:5200/xxxx/newhello:latest  #容器使用的docker仓库镜像地址
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8088
        env:
        - name: TZ
          value: Asia/Shanghai
        volumeMounts:
        - name: ywpa-logs
         mountPath: /root/ywHome/Logs     #定义容器内的Volume目录
     volumes:
     - name: ywpa-logs
        hostpath:
        path: /root/ywHome2/logs   #挂载的宿主机目录

(4).创建运行pod命令

kubectl create -f pod.yaml    #有命名空间必须加-n 命名空间名

kubectl apply -f pod.yaml     #有命名空间必须加-n 命名空间名

(5).查看pod状态

kubectl get pod      #有命名空间必须加-n 命名空间名

watch kubectl get pods -o wide    #有命名空间必须加-n 命名空间名

 (6).查看pod运行在K8s哪个node节点

kubectl get pod -o wide       #有命名空间必须加-n 命名空间名

 (7).修改更新pod命令,yaml文件修改后执行更新

kubectl replace -f pod.yaml

(8).删除pod

kubectl delete pod (podName)       #有命名空间必须加-n 命名空间名

使用yaml文件删除pod,但yaml文件照样存在,只删除pod

kubectl delete -f "xxx.yaml"

 创建 Service

  • Service 通过 label 关联对应的 Pod
  • Servcie 生命周期不跟 Pod 绑定,不会因为 Pod 重创改变 IP
  • 提供了负载均衡功能,自动转发流量到不同 Pod
  • 可对集群外部提供访问端口
  • 集群内部可通过服务名字访问

 

 创建 一个 Service,通过标签test-k8s跟对应的 Pod 关联上

 (9).创建的svc.yaml内容如下:

apiVersion: v1    
kind: Service   
metadata:               
   name: newhello      
spec:
  selector:       
    app: newhello     #通过此label 关联对应的 Pod
  ports:
  - port: 8086   #本service端口
    targetPort: 8086  #容器端口
    nodePort: 31446  #节点端口,端口有效范围:30000-32000
    protocol: TCP   #端口协议,默认tcp,支持tcp和udp 

# 默认 ClusterIP 集群内可访问,NodePort 节点可访问,LoadBalancer 负载均衡模式(需要负载均衡器才可用)
  type: NodePort    #当spec.type=NodePort时,同上,除了eureka和zuul,其他服务暂不开放
        

 

服务的默认类型是ClusterIP,只能在集群内部访问,我们可以进入到 Pod 里面访问:
kubectl exec -it pod-name -- bash
curl http://test-k8s:8080

如果要在集群外部访问,可以通过端口转发实现(只适合临时测试用):
kubectl port-forward service/test-k8s 8888:8080

上面我们是通过端口转发的方式可以在外面访问到集群里的服务,如果想要直接把集群服务暴露出来,我们可以使用NodePort 和 Loadbalancer 类型的 Service

应用配置 kubectl apply -f service.yaml
在节点上,我们可以 curl http://localhost:31000/hello/easydoc 访问到应用
并且是有负载均衡的,网页的信息可以看到被转发到了不同的 Pod

Loadbalancer 也可以对外提供服务,这需要一个负载均衡器的支持,因为它需要生成一个新的 IP 对外服务,否则状态就一直是 pendding,这个很少用了,后面我们会讲更高端的 Ingress 来代替它。

多端口时必须配置 name, 文档

 apiVersion: v1
kind: Service
metadata:
  name: test-k8s
spec:
  selector:
    app: test-k8s
  type: NodePort
  ports:
    - port: 8080        # 本 Service 的端口
      name: test-k8s    # 必须配置
      targetPort: 8080  # 容器端口
      nodePort: 31000   # 节点端口,范围固定 30000 ~ 32767
    - port: 8090
      name: test-other
      targetPort: 8090
      nodePort: 32000

(10).创建services服务命令

 kubectl apply -f xxx.yaml --namespace=xxx    #有命名空间必须加-n 命名空间名

kubectl create -f svc.yaml    #有命名空间必须加-n 命名空间名

kubectl expose deployment newhello --port=8086 --target-port=8086 --type=NodePort -n hello

 (11).查看ervice服务

kubectl get svc    #有命名空间必须加-n 命名空间名

kubectl get services        #有命名空间必须加-n 命名空间名

 (12).yaml从dockerhub上拉下来镜像

1.进入pod容器

kubectl exec -it (podName) /bin/sh   #有命名空间必须加-n 命名空间名

kubectl exec -it (podName)  #有命名空间必须加-n 命名空间名 sh   

 -c container-name 可以指定进入哪个容器。

kubectl exec -it pod-name -- bash

 2.退出容器

exit

3.测试自定义接口:

 curl "http://localhost:8088/demo/he"

 (13).删除pod

kubectl delete pod hello-52bf9aa77a5c   #有命名空间必须加-n 命名空间名

# 查看 deployment

kubectl get deployment 

  # 查看 pod 详情

kubectl describe pod pod-name

 # 查看 log

kubectl logs pod-name

 # 伸缩扩展副本

kubectl scale deployment test-k8s --replicas=5

 # 把集群内端口映射到节点

kubectl port-forward pod-name 8090:8080

# 查看历史

kubectl rollout history deployment test-k8s

# 回到上个版本

kubectl rollout undo deployment test-k8s

# 回到指定版本

kubectl rollout undo deployment test-k8s --to-revision=2

# 删除部署

kubectl delete deployment test-k8s

 # 查看全部

kubectl get all

# 重新部署

kubectl rollout restart deployment test-k8s

# 命令修改镜像,--record 表示把这个命令记录到操作历史中

kubectl set image deployment test-k8s test-k8s=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v2-with-error --record

# 暂停运行,暂停后,对 deployment 的修改不会立刻生效,恢复后才应用设置

kubectl rollout pause deployment test-k8s

# 恢复


kubectl rollout resume deployment test-k8s

# 输出到文件

kubectl get deployment test-k8s -o yaml >> app2.yaml

# 删除全部资源

kubectl delete all --all

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值