Category: Kubernetes

  • kubectl 操作记录

    设置 master

    kubectl label node node-master.foo.bar kubernetes.io/role=master
    node "node-master.foo.bar" labeled
    

    查看集群组件信息

    kubectl get cs

    查看集群的 master api 地址

    kubectl cluster-info
    kubectl cluster-info dump

    查看集群的各种资源类型

    kubectl api-resources | grep  istio
    kubectl get pods --namespace=kube-system
    

    强制删除 pod

    kubectl delete pod nginx-1849696770-2pk8t -n myspace --grace-period=0 --force
    

    转发一个端口

    kubectl -n monitoring port-forward deployment/getup-grafana 3000:3000
    kubectl -n monitoring port-forward alertmanager-getup-prometheus-operator-alertmanager-0 9093:9093
    kubectl -n monitoring port-forward prometheus-getup-prometheus-operator-prometheus-0 9090:9090
    

    exec 执行长命令被截断,需要用 —

    kubectl exec $POD_NAME tail -n 10 /var/log/newrelic_agent.log
    Error from server (NotFound): namespaces "10" not found
    应该用
    kubectl exec $POD_NAME -- tail -n 10 /var/log/newrelic_agent.log
    或
    kubectl exec $POD_NAME -- bash -c "tail -n 10 /var/log/newrelic_agent.log"
    

    查看所有事件

    kubectl get events
    
    kubectl -n istio-system port-forward prometheus-6cabcdab97-mwptl 18080:9090
    kubectl -n istio-system port-forward grafana-fabcd765b-vtcxp 18080:3000
    kubectl -n istio-system port-forward kiali-8babb947c-b5g5m 18080:20001
    
    kubectl api-resources
    
    app=account_service
    kubectl logs --tail 10 -f -l app=$app -n default -c $app
    
    kubectl get secret config1 -o json | jq '.data | map_values(@base64d)'
    
    kubectl get all -n jenkins
    
    NAME                         READY   STATUS    RESTARTS   AGE
    pod/jenkins-8d6cc58f-dnfv6   1/1     Running   0          3d5h
    
    NAME                           TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)           AGE
    service/jenkins                ClusterIP      10.31.30.9             80/TCP            544d
    service/jenkins-agent          LoadBalancer   10.31.25.64   172.170.0.41    50000:21700/TCP   544d
    service/jenkins-agent-public   LoadBalancer   10.31.25.94   xx.xx.xx.xxx   50000:22289/TCP   402d
    
    NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/jenkins   1/1     1            1           544d
    
    NAME                                 DESIRED   CURRENT   READY   AGE
    replicaset.apps/jenkins-7f57bfbd76   0         0         0       544d
    replicaset.apps/jenkins-8d6cc58f     1         1         1       367d
    
    

    查看 pod 的名字

    for pod in `kubectl get pods -n dev -o jsonpath={.items..metadata.name} `; do kubectl get pod $pod -n dev ; done
    

    查看 svc 的 ip

    kubectx | grep gke_ | while read line; do echo $line; kubectl --context $line get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'; echo; done
    

    查看 image 和 containerID

    kubectl get pods -n dev -o jsonpath='{range .items[*].status.containerStatuses[*]}{.image}{"\n"}{.containerID}{"\n\n"}{end}' 
    

    用 go template

    kubectl get nodes -l cloud.google.com/machine-family=n1 -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
    
  • kubernetes权威指南读后总结

    k8s 的优点:

    1. 开发和运维的高手编写,产品思维好,贴近需求。掌握一些网络,linux, iptables,docker 知识的工程师就能搭起来。就像早期的 linux, HTTP 一样有缺点,但最核心功能简单高效;
    2. k8s 将自己打造成一个编排容器的平台,把管理容器的部分抽象成 Container Runtime Interface, CRI。编排容器不只可以是 docker,还可以是 rkt;
    3. 把自己抽出来当一个平台,计划将自建机房,云供应商都纳入管理,跨机房迁移简单。感觉随时可以对 docker 和 一些云服务商进行降维打击;
    4. 配置简单上线就简单,用的人就多。

    如果使用 k8s,可能有几个阶段就能完全接入:

    1. Deployment 功能,结合自己的 CI/CD 。不管单体应用还是微服务,自动解决大部分无状态应用上线变更需求,同时做好监控告警和日志收集;
    2. 使用 Service + dns 功能,把应用包装成一系列有 load balancer 和 私有域名的微服务,基本解决无状态应用上线;
    3. Jobs 功能,定时处理任务;

    上面问题解决后,可以腾出很多时间玩点高级的:

    4. Stateful Set + 存储 + dns 提供有状态的服务,可配置集群 redis, etcd, cassandra, mongodb等;
    5. Ingress nginx 提供四层 七层入口;
    6. 环境变量植入 容器内部访问 apiserver,基于 apiserver 做逻辑功能;
    7. namespace 隔防,网络隔离;
    8. 资源配额,精心规划 requests limits 设置,提高资源利用率;
    9. Helm 管理这些 k8s 应用配置,基础设施即代码。