欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Kubernetes常用命令及应用实例

程序员文章站 2022-04-11 22:02:32
一. 常用命令 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubern...
一. 常用命令

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。

1. 部署
kubectl create -f request.yaml

request.yaml 内容在实例中

2. 删除pod
kubectl delete pod pod名

#删除deployment
kubectl delete deploy request
3. 查看pod
kubectl get pod 

#pod的详细信息
kubectl get pod -o wide

#某个pod的详细信息
kubectl describe pod request-asdajsd2313-sdf

#通过选择器名查询
kubectl get pod --selector name=redis
4. 查看日志
kubectl log -f (pod的name)
5. 部署服务
kubectl expose deployment request --type=LoadBanlancer

解释:
kubectl expose 将资源暴露为新的Kubernetes Service
type有三种类型

ClusterIP:使用一个集群固定IP,这个是默认选项 NodePort:使用一个集群固定IP,但是额外在每个POD上均暴露这个服务,端口 LoadBalancer:使用集群固定IP,和NODEPord,额外还会申请申请一个负载均衡器来转发到服务(load balancer )
注意:NodePort 支持TCP和UDN,但是LoadBalancers在1.0版本只支持TCP 6. 查看服务
kubectl get service
7. 更新pod
#第一个requet 是deployment名称,第二个request是request.yaml中定义的镜像名
#将镜像设置成最新的
#-- record :记录版本用的
kubectl set image deployment/request request=hub.yun.paic.com.cn/sunhui227/request:dev1.0.1 --record

#显示deployment "request" image updated 则成功
#查看更新状态
kubectl rollout status deployment/request

#查看pod状态
kubectl get pod 

#查看rs状态
kubectl get rs 
9. 终止升级,继续升级
kubectl rollout pause deployment/request

kubectl rollout resume deployment/request
10. 回滚pod
#回滚到前一版本
kubectl rollout undo deployment/request

#查看历史版本
kubectl rollout history deployment/request

#回滚到指定版本-5
kubectl rollout undo deployment/request  --to-revision=5
11. 收缩,扩容
kubectl scale  --replicas=1 deploy/request
或
kubectl scale deployment request --replicas 10
12. 获取帮助
kubectl scale -h
13. 查看deployment详细信息
kubectl describe deployment
14. 查看ingress
Kubectl get ing
#详情
Kubectl get ing –o yaml 
#更新
kubectl edit ing test
二. 实例

阐述一些实例

1. 编写ingress

通常情况下,service和pod的IP仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到service在Node上暴露的NodePort上,然后再由kube-proxy将其转发给相关的Pod。
而Ingress就是为进入集群的请求提供路由规则的集合

1. 路由到多服务的Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        backend:
          serviceName: s1
          servicePort: 80
      - path: /bar
        backend:
          serviceName: s2
          servicePort: 80

2. 虚拟主机Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: s1
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: s2
          servicePort: 80
2. 编写创建pod的yaml

以request.yaml为例

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: request                #名称
  namespace: sasda-asdasd123   #空间
spec:
  replicas: 1                  #pod个数
  template:
    metadata:
      labels:
        run: request           #label
    spec:
      nodeSelector:
        itil_cluster: sasda-asdasd123        #集群选择器,指定pod创建在哪个集群中
      containers:
      - env:                                 #环境变量
        - name: PROFILE                      #dockerfile中的启动项目用
          value: dev_k8s
        - name: HOSTNAME                     #项目资源文件中的eureka用
          value: request
        image: hub.yun.com.cn/sunhui227/request:dev  #镜像
        imagePullPolicy: Always                      #每次都去远程拉取
        name: request
        ports:
        - containerPort: 9090                        #项目暴漏出来的端口
          protocol: TCP