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 对象



原文地址:https://www.cnblogs.com/testzcy/p/13054236.html