Kubernetes 常用命令及应用实例

一. 常用命令

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

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

具体详情请移步kubernetes中文文档

1. 部署

kubectl create -f request.yaml
  • 1

request.yaml 内容在实例中

2. 删除pod

kubectl delete pod pod名

#删除deployment
kubectl delete deploy request
  • 1
  • 2
  • 3
  • 4

3. 查看pod

kubectl get pod 

#pod的详细信息(运行在哪个节点)
kubectl get pod -o wide

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

#通过选择器名查询
kubectl get pod --selector name=redis
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4. 查看日志

kubectl log -f (pod的name)
  • 1

5. 部署服务

kubectl expose deployment request --type=LoadBanlancer
  • 1

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

  1. ClusterIP:使用一个集群固定IP,这个是默认选项
  2. NodePort:使用一个集群固定IP,但是额外在每个POD上均暴露这个服务,端口
  3. LoadBalancer:使用集群固定IP,和NODEPord,额外还会申请申请一个负载均衡器来转发到服务(load balancer )
    注意:NodePort 支持TCP和UDN,但是LoadBalancers在1.0版本只支持TCP

6. 查看服务

kubectl get service
  • 1

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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

也可以用以下方式更新:
1.使用kubectl apply命令来发起Deployment更新

新建一个yaml文件,改成最新的IMAGES

kubectl apply -f new-request.yaml
  • 1
  • 2

2.通过edit命令在线修改deployment:

kubectl edit deployment nginx-deployment
  • 1

保存即可自动更新


9. 终止升级,继续升级

kubectl rollout pause deployment/request

kubectl rollout resume deployment/request
  • 1
  • 2
  • 3

10. 回滚pod

#回滚到前一版本
kubectl rollout undo deployment/request

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

#回滚到指定版本-5
kubectl rollout undo deployment/request  --to-revision=5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

11. 收缩,扩容

kubectl scale  --replicas=1 deploy/request
或
kubectl scale deployment request --replicas 10
  • 1
  • 2
  • 3

12. 获取帮助

kubectl scale -h
  • 1

13. 查看deployment详细信息

kubectl describe deployment
  • 1

14. 查看ingress

Kubectl get ing
#详情
Kubectl get ing –o yaml 
#更新
kubectl edit ing test
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

15. 删除一直处于terminating状态的pod

kubectl get pod | grep Terminating | awk {'print $1'} | xargs kubectl delete pod  --grace-period=0 --force
  • 1

16. 进入POD内部

kubectl exec -it  change-1124521512-pmnls   /bin/bash
  • 1

二. 实例

阐述一些实例

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

--------------------- 本文来自 司马缸砸缸了 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yy756127197/article/details/78815923?utm_source=copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值