Kubernetes 常用命令及应用实例

来源:互联网 发布:域名有哪几部分组成 编辑:程序博客网 时间:2024/05/17 20:13

一. 常用命令

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

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

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

1. 部署

kubectl create -f request.yaml

request.yaml 内容在实例中

2. 删除pod

kubectl delete pod pod名#删除deploymentkubectl 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有三种类型

  1. ClusterIP:使用一个集群固定IP,这个是默认选项
  2. NodePort:使用一个集群固定IP,但是额外在每个POD上均暴露这个服务,端口
  3. 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 

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

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

kubectl apply -f new-request.yaml

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

kubectl edit deployment nginx-deployment

保存即可自动更新


9. 终止升级,继续升级

kubectl rollout pause deployment/requestkubectl rollout resume deployment/request

10. 回滚pod

#回滚到前一版本kubectl rollout undo deployment/request#查看历史版本kubectl rollout history deployment/request#回滚到指定版本-5kubectl rollout undo deployment/request  --to-revision=5

11. 收缩,扩容

kubectl scale  --replicas=1 deploy/requestkubectl 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

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

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

16. 进入POD内部

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

二. 实例

阐述一些实例

1. 编写ingress

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

1. 路由到多服务的Ingress

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: testspec:  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/v1beta1kind: Ingressmetadata:  name: testspec:  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/v1beta1kind: Deploymentmetadata:  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

想了解docker的使用可以查看 Docker 常用命令和使用实例
内容不断更新中~~

原创粉丝点击