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/