K8S 整理

kebectl 部署常用操作

服务管理

deployment、service、cronJob、ingress都是支持的

# 创建及更新服务(yaml文件形式)
kubectl apply -f web-click.yaml
# 删除服务(配置文件形式)
kubectl delete -f web-click.yaml
# 删除服务
kubectl delete deployment adc-web -n bigdata
kubectl delete svc adc-web -n bigdata
# 查看服务
kubectl get deployment --namespace=bigdata
kubectl get svc --namespace=bigdata
kubectl get ingress --namespace=bigdata
kubectl get cronjob smcheck-cronjob  -n bigdata
# 查看具体pod详细信息
kubectl describe pods adc-web-click-5f64b5fc-5v5n4 -n bigdata
kubectl describe ingress adc-ingress -n bigdata

pod信息

# 包含pod运行的状态
kubectl get pods --namespace=bigdata |grep adc
--
STATUS - Terminating 官方解释
Note: When a Pod is being deleted, it is shown as Terminating by some kubectl commands. This Terminating status is not one of the Pod phases. A Pod is granted a term to terminate gracefully, which defaults to 30 seconds. You can use the flag --force to terminate a Pod by force.
--

# 显示详细信息 如ip
kubectl get pods -o wide -n bigdata 	

查看pod日志

kubectl logs adc-web-click-5f64b5fc-6qs6w  -n bigdata

cronjob临时执行

构建job 从一个已有的cronjob载入配置执行

# cronjob 通过get cronjobs获取
kubectl create job check-test -n bigdata --from=cronjob/check-cronjob  --kubeconfig .kube/config

job执行完可以删除pods,避免占用空间

kubectl delete pod check-test-ldnfs -n bigdata

问题排查

查看容器进入容器环境

kubectl exec -it [pod name] --container [container name] -n [namespace] [执行命令]

kubectl exec -it callbackconsume-job-758874f99d-pgmtf --container adc-callback -n bigdata ls config/debug

查看日志

# -f 跟踪打印
kubectl logs -f --tail=10 callbackconsume-job-758874f99d-pgmtf -n bigdata

Ingress会有对应的ingress-controller对应pod,记录着ingress的访问日志;

 kubectl logs -f --tail=10 nginx-nginx-ingress-controller-7b85bf4f78-zsznw

将pod分配给节点

https://kubernetes.io/zh/docs/concepts/configuration/assign-pod-node/

查看节点 显示标签

kubectl get nodes --show-labels

添加标签

kubectl label nodes <node-name> <label-key>=<label-value>

添加 nodeSelector 字段到 pod 配置中

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

kubectl apply -f https://k8s.io/examples/pods/pod-nginx.yaml 命令,pod 将会调度到将标签添加到的节点上。

可以通过运行 kubectl get pods -o wide 并查看分配给 pod 的 “NODE” 来验证其是否有效

监控job

kubectl get jobs --watch -n bigdata

Replace "hello-4111706356" with the job name in your system

pods=$(kubectl get pods --selector=job-name=smcheck-cronjob-1589540820 --output=jsonpath={.items[*].metadata.name})

kubectl get pods --selector=job-name=smcheck-cronjob-1589540640

smcheck-cronjob-1589536140y

ingress使用

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: bigdata
  name: adc-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"					# ingress指定nginx		
    nginx.ingress.kubernetes.io/server-snippet: |     # 设置nginx 服务脚本配置
        set $flag 0;
        if ( $uri = /click) {
          set $flag 1;
        }
        if ( $args ~ project=ios ) {
          set $flag 1$flag;
        }
        if ( $flag = 11 ) {
          rewrite ^/(.*) $uri-ios break;
        }
spec:
  rules:
    - host: walking.sun.com
      http:
        paths:															# path对应nginx path
          - path: /click/google
            backend:
              serviceName: google-srv       # 指定path 请求会转发到对应的svc
              servicePort: 8080
          - path: /click-ios
            backend:
              serviceName: web-ios-srv
              servicePort: 8080
          - path: /click
            backend:
              serviceName: web-srv
              servicePort: 8080
    - host: walking.sun123.com
      http:
        paths:
          - path: /click/google
            backend:
              serviceName: google-srv
              servicePort: 8080
  tls:																			# 开发tls
    - hosts:
        - walking.sun.com
      secretName: sun.com
    - hosts:
        - walking.sun123.com
      secretName: sun123.com

参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#internal

为容器和Pods分配CPU资源

容器将会请求 1 个 CPU,而且最多限制使用 2个 CPU。

          resources:
            limits:
              cpu: '2'
              memory: 4000Mi    # 最多使用4000M字节
            requests:
              cpu: '1'
              memory: 4000Mi
          volumeMounts:
            - name: config-volume
              mountPath: /config/release

CPU 资源以 CPU 单位度量。Kubernetes 中的一个 CPU 等同于:

  • 1 个 AWS vCPU
  • 1 个 GCP核心
  • 1 个 Azure vCore
  • 裸机上具有超线程能力的英特尔处理器上的 1 个超线程

小数值是可以使用的。一个请求 0.5 CPU 的容器保证会获得请求 1 个 CPU 的容器的 CPU 的一半。 你可以使用后缀 m 表示毫。例如 100m CPU、100 milliCPU 和 0.1 CPU 都相同。 精度不能超过 1m。

参考:https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/

posted @ 2020-08-31 21:55  walkingSun  阅读(214)  评论(0编辑  收藏  举报
**/