k8s常用命令

使用docker运行一个hello world容器

docker run busybox echo "hello world"

后台模式运行容器

docker run --name kubia-container -p 8080:8080 -d kubia

构建容器镜像(Dockerfile)

docker build -t kubia .

查看本地镜像

docker images

列出运行中的容器

docker ps

交互式在容器中运行shell

docker exec -it kubia-container bash

停止和删除容器

docker stop kubia-container
docker rm kubia-container

镜像打标签和推送

docker tag kubia luksa/kubia
docker login
docker push luksa/kubia

查看容器日志

docker logs

kubectl命令行方式运行pod

kubectl run kubia --image=luksa/kubia --port=8080

创建一个服务

kubectl expose pod kubia <--type=LoadBalancer --name kubia-http> (type指定svc类型默认clusterip,name指定svc名称)

查看资源

kubectl get ... (#-o wide列出pod ip和运行节点 #-o yaml输出格式 #--show-lables列出标签#-L列出指定标签)
kubectl describe ...

查看k8s集群信息

kubectl cluster-info

查看api对象字段

kubectl explain pod
kubectl explain pod.spec

从yaml创建pod

kubectl create -f kubia-manual.yaml

查看日志

kubectl logs -c (#--previous获取奔溃容器的日志)

将本地网络端口转发到pod中的端口(错误解决:yum -y install socat)

kubectl port-forward kubia-manual 8888:8080
参考:https://stackoverflow.com/questions/33517646/unable-to-do-port-forwarding-socat-not-found-kubernetes-on-docker

添加和修改标签

kubectl label po #添加
kubectl label po --overwrite #修改

添加注解

kubectl annotate

删除pod

kubectl delete po (--all 所有poad)
kubectl delete po -l
kubectl delete ns #删除整个命名空间
kubectl delete all --all (删除所有资源)

容器退出状态码

128+9(SIGKILL) 进程强制终止,此时会创建一个全新容器
128+15(SIGTERM)

livenessprobe存活探针设置初始延迟

initalDelaySeconds 设置延迟来说明应用程序启动时间

只删除rc,不删除rc管理的pods

kubectl delete rc kubia --cascade=false

找出节点ip地址

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'

认证授权访问api服务器

export CURL_CA_BUNDLE=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
TOKEN=TOKEN" https://kubernetes

赋予所有账户集群管理员权限

kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --group=system:serviceaccounts

1、应用YAML文件创建资源

kubectl apply -f nginx-test.yaml

2、通过YAML文件删除资源

kubectl delete -f nginx-test.yaml #删除YAML文件中定义的资源

3、导出已有的Pod为YAML格式

kubectl get deployment nginx-test -o yaml

4、使用dry-run干跑模式导出YAML

kubectl create deployment test --image=nginx:1.7.9 --dry-run=client -o yaml > nginx.yaml

5、查看api、资源类型

kubectl api-versions #查看K8S所支持API版本
kubectl api-resources #查看K8S所有资源类型
kubectl explain pods #发现api对象字段
kubectl explain pods.spec#了解各个属性更多信息

6、创建和查看资源状态

kubectl apply -f pod-demo.yaml
kubectl get pods #查看容器是否运行,正常情况应该是Running
kubectl get pods -o wide #查看pod详细信息,包含了IP、所属Node等
kubectl get pods --show-labels #查看资源标签
kubectl get pods -L creation_method,env #将creation_method,env标签展示在列表上
kubecl label pods kubia-manual creation_method=manual #添加标签
kubecl label pods kubia-manual env=debug --overwrite #修改标签--overwrite选项
kubectl get namespaces #查看namespace
kubectl get pods -n kube-system #显示指定namespace的pod

7、查看pod详细信息

kubectl describe pods pod-demo

8、删除pod

kubectl delete pods #按名称删除
kubectl delete pods -l

9、查看容器的应用日志

kubectl logs mypod
kubectl logs mypod --previous #查看前一个容器的日志
退出状态码是两个数字的总和:128+x, 其中x是终止进程的信号编号

10使用JSONPath获取节点ip地址:

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'

http://kubernetes.io/docs/user-guide/jsonpath

10、服务质量QOS

主要用于Pod调度和驱逐,优先级越低的QOS越容易被驱逐。不同QOS优先级不同,使用kubectl describe命令可以查看Qos Class:
· BestEffort:尽可能的为Pod分配资源,默认不进行requests设置就是该QOS,优先级最低
· Burstable:资源可波动,requests小于limit的值就是该QOS,推荐
· Guaranteed:完全可保障资源,必须使用requests和limit定义内存和CPU两项资源并且相等,优先级最高

10、调度到 一个特定节点

由于每个节点都有 一个唯 一标签 , 其中 键为kubernetes.io/hostname,值为该 节点的 实际主机名

11、添加和修改注解

kubectl annotate pods

----------------------------------------------------

Deployment示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: a.demo.com-deployment
spec:
  selector:
    matchLabels:
      app: a.demo.com
  replicas: 2
  template:
    metadata:
      labels:
        app: a.demo.com
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/scheme: "http"
        prometheus.io/path: "/actuator/prometheus"
        prometheus.io/port: "80"
    spec:
      containers:
      - name: a-demo-com
        image: xiaojiaqi/a.demo.com:v2
        ports:
        - containerPort: 80
        env:
        - name: SERVER_PORT #变量的名字
          value: "80" #变量的值
        - name: eureka_client_service-url_defaultZone #变量的名字
          value: "http://eureka-demo-com-0.eureka-demo-com-svc.default.svc.cluster.local:8761/eureka/,http://eureka-demo-com-1.eureka-demo-com-svc.default.svc.cluster.local:8761/eureka/,http://eureka-demo-com-2.eureka-demo-com-svc.default.svc.cluster.local:8761/eureka/" 
        - name: spring_cloud_sentinel_transport_port
          value: "8719"
        - name: spring_cloud_sentinel_transport_dashboard
          value: "sentinel-demo-com-svc.default.svc.cluster.local:8080"
        - name: JAVA_OPTIONS
          value: "-Xms128m -Xmx128m "
        - name:  spring_zipkin_base-url
          value: "http://zipkin-demo-com-svc.default.svc.cluster.local.:9411" 
        resources: #资源管理
          requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
            cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
            memory: "128Mi" #内存使用量
          limits: #资源限制
            cpu: 0.5
            memory: "256Mi"
        livenessProbe: #pod内容器健康检查的设置
          httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常
            path: /hs #URI地址
            port: 80
            #host: 127.0.0.1 #主机地址
            scheme: HTTP
          initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始
          timeoutSeconds: 5 #检测的超时时间
          periodSeconds: 15  #检查间隔时间

你可能感兴趣的:(k8s常用命令)