• k8s 学习笔记


    DaemonSet:每个运算节点上部署一份
    Deployment 管 ReplicaSet,ReplicaSet 管 Pod
    StatefulSet 管有状态应用的控制器
    ===
    资源字段:api版本(apiVersion),kind,metadata,清单(spec)、状态(status)
    name通常定义在metadata下面
    ====
    Namespace将K8S分组了,k8s中默认的名称空间有:default 、kube-system、kube-public
    查询特定资源需要带上相应的名称空间
    ===
    标签和资源是多对多的关系,一个资源可以有多个标签,一个标签可以对应多个资源
    ===
    matchLabels ( = )
    matchExpressions (in, not in,exists
    ======
    http、https类型的资源推荐用Ingress来暴露接口
    =======

    kube-proxy :建立pod网络和集群网络的关系
    三种常用流量调度模式:
    userspace,iptables,ipvs(推荐)
    ======

    nslookup用于查询DNS的记录,查询域名解析是否正常,如:nslookup domain [dns-server]
    用bind9做DNS服务
    ======= dig使用说明:https://www.cnblogs.com/sparkdev/p/7777871.html
    dig 命令主要用来从 DNS 域名服务器查询主机地址信息。所以可以用来测试DNS服务是否正常
    例如解析harbor.od.comz,要获得精简的结果可以使用 +short 选项: dig -t A harbor.od.com +short

    指定 DNS 服务器的方式为使用 @ 符号:dig -t A www.baidu.com @192.168.0.2 +short

    可以使用 dig 的 -x 选项来反向解析 IP 地址对应的域名:dig -x 8.8.8.8 +short

    dig -t A nginx-dp.kube-public.svc.cluster.local. @192.168.0.2 +short


    ====
    把正式还原成json格式,可以看到证书的签发时间:cfssl-certinfo -cert apiserver.pem
    查看域证书:cfssl-certinfo -domain www.baidu.com
    可以通过kubelet.kubeconfig中拿到证书相关信息,通过base64 -d 反解,然后写入文件,
    然后将证书还原成json,从而了解证书的信息
    =====
    可以利用md5sum计算文件的md5,从而看两个文件是否一样
    ========
    查看名称空间:kubectl get namespace 或 kubectl get ns (namespace简称ns)
    查看空间中的资源:kubectl get all -n default
    创建空间:kubectl create namespace app
    删除空间:kubectl delete namespace app
    创建deployment(简写deploy):kubectl create deployment nginx-dp --image=nginx:1.7.9 -n kube-public
    查看deployment : kubectl get deployment -n kube-public
    展示扩展信息(-o wide):kubectl get pods -n kube-public -o wide
    看详细信息:kubectl describe deployment nginx-dp -n kube-public
    进入pod:kubectl -exec -it pod-id /bin/bash -n kube-public
    删除pod(删除是重启的方法之一):kubectl delete pod pod-id -n kube-public [--force --grace-period=0 ]
    删除deployment:kubectl delete deploy nginx-dp -n kube-public
    创建服务:kubectl expose deployment nginx-dp --port=80 -n kube-public
    查看服务:kubectl get svc -n kube-public
    扩容:kubectl scale deployment nginx-dp --replication=2 -n kube-public
    命令大全:kubectl --help
    查看yaml:kubectl get pods pod-id -o yaml -n kube-public
    查看yaml中字段含义:kubectl explain service.metadata
    语法格式:kubectl create/apply/delete -f /path/yaml
    应用yaml:kubectl apply -f nginx-svc.yaml
    利用yaml删除:kubectl delete -f nginx-svc.yaml
    在线修改yaml:kubectl edit svc nginx-dp
    daemonset缩写ds

    =============

    k8s中文社区:http://docs.kubernetes.org.cn/
    加静态路由:route add -net 172.7.21.0/24 gw 10.4.7.21 dev eth0

    =========

    K8S的DNS实现服务在集群内被自动发现
    服务被集群外访问:
    1)使用NodePort型service
    注意:无法使用kube-proxy的ipvs模型,只能使用iptables模型
    2)使用Ingress资源:
    注意:Ingress只能调度并暴露7层应用,特指http和https协议

    =========

    Kubernetes Scheduler, 它的作用是将待调度的Pod通过一些复杂的调度流
    程计算出最佳目标节点, 然后绑定到该节点上

    Controller的作用:当发生各种故障导致某资源对象的状态
    发生变化时, Controller会尝试将其状态调整为期望的状态

    kubelet通过cAdvisor监控容器和节点资源

    每创建一个新的Pod, kubelet都会先创建一个Pause容器

    Service的Cluster IP与NodePort等概念是kube-proxy服务通过iptables
    的NAT转换实现的, kube-proxy在运行过程中动态创建与Service相关的
    iptables规则, 这些规则实现了将访问服务(Cluster IP或NodePort) 的请
    求负载分发到后端Pod的功能

    kubectl describe pod pod_id 返回的内容有 EVENT 相关的信息

    查看容器日志:kubectl logs pod_id
    kubectl logs pod-id -c container_id

    通过systemctl查看kubernetes服务的日志,如:systemctl status kube-controller-manager -l

    可以先确定Pod在哪个节点
    上, 然后登录这个节点, 从kubelet的日志中查询该Pod的完整日志, 然
    后进行问题排查。 对于与Pod扩容相关或者与RC相关的问题, 则很可能
    在kube-controller-manager及kube-scheduler的日志中找出问题的关键点

    kube-proxy经常被我们忽视, 因为即使它意外停止, Pod的状
    态也是正常的, 但会导致某些服务访问异常

    查看某个服务的endpoint列表:kubectl get endpoints <service_name>

    查看service的名称能否被解析:ping <service_name>.<namespace>.svc

    ========

    ipvsadm -Ln

    博客:http://ccnuo.com/

    https://blog.stanley.wang/
    docker ce

    -------------尚硅谷

    创建一个service: kubectl expose deployment nginx-deployment --port=3000 --target-port=80
    (映射出来的端口是3000,pod内部是80)
    创建一个deployment时,会自动创建rs
    kubectl log myapp-pod -c test

    查看集群内部dns pod: kubectl get pod -n kube-system

    pod重启,会导致init容器重新执行

    只能修改init容器spec下面的image字段,修改其他字段无效。
    对init容器image的修改等价与重启pod

    探针是kubelet对容器执行的定期诊断
    HTTPGetAction若响应的状态码大于等于200且小于400,则认为诊断成功

    RS比RC多了集合式的selector

    deployment是声明式;RS是命令式
    创建deployment时,deployment会创建一个RS,deployment是通过RS来控制pod的

    Daemonset确保在全部或一些NODE上运行一个pod


    可以通过spec.revisionHistoryLimit来指定deployment最多保留多少revision,默认保留所有revision;若将该项的值设为0,则Deployment就不允许回退了

    加载镜像:docker load -i perl.tar

    //////////// IPVSi
    ipvsadm -Ln
    kubectl get svc

    保存镜像;docker save -o ***.tar 镜像名
    加载;docker load -i ***.tar

    使用目录创建configmap:
    kubectl create configmap game-config --from-file=docs/user-gaide/
    使用文件创建configmap:
    kubectl create configmap game-config --from-file=docs/user-gaide/game.properties
    查看configmap: kubectl get cm
    使用字面值创建:
    kubectl create configmap game-config --from-literal=special.how=very --from-literal=special.type=charm

    修改configmap:kubectl edit configmap log-config
    更新configmap后:使用cm挂载的环境变量不会更新;使用cm挂载的volume需要一段时间才会更新(大概10s)

    卷的生命比pod中的容器长,当容器重启时,卷仍然存在;当pod不存在时,卷也将不存在

    PV独立于pod的生命周期之外

    Pod消耗节点资源,PVC消耗PV资源;PV和pvc是一对一的映射

    要创建StatefulSet,则需要先创建一个无头service(clusterIP:None)

    Namespace 对象仅用于资源对象名称的隔离,它自身并不能隔绝跨名称空间的 Pod 间通信,那是网络策略( network policy )资源的功能

    无论是否为容器指定了要暴露的端口,都不会响集他节点之上的 Pod 客户端进行访问

    Docker 镜像启动容器时运行的应用程序在相应的 Dockerfile 中由 ENTRYPOINT 指进行定义,传递给程序的参数则通过 CMD 指令指定,

    ENTRYPOINT 指令不存在时, CMD 可用于同时指定程序及其参数

    使用 printenv一类的命令都能在容器中获取到所有环境变量的列

    仅需要设置 spec.hostNetwork 的属性为 true 即可创共享节点 网络名称 Pod 对象



  • 相关阅读:
    linux下面发布80端口的服务
    visio 安装
    SSH进行登录远程主机,实验室网站,项目
    论文遇到的问题
    ubuntu设置目录容量大小
    ubuntu 磁盘分区
    SpringBoot打成的jar包发布,shell关闭之后一直在服务器运行
    docker的安装,使用
    多线程下载文件,ftp文件服务器
    抖音红人,
  • 原文地址:https://www.cnblogs.com/testzcy/p/13054236.html
Copyright © 2020-2023  润新知