首页
关于
留言
接口
搜索
资讯
技术
资源
悦读
杂记
首页
登录
登录
搜索
emer
累计撰写
58
篇文章
累计收到
0
条评论
首页
栏目
资讯
技术
资源
悦读
杂记
首页
登录
页面
首页
关于
留言
接口
腾讯云福利
主机特惠
2023-11-20
Ubuntu安装后开启终端端口22,远程连接
1、打开终端窗口,执行:ifconfig 命令,如果提示没有些服务或者报错,说明没有安装net-tools工具。执行安装命令:sudo apt install net-tools -y2、查看需要开启的端口是否被占用查询命令:netstat -lntp|grep 22小注:-n 不以进程的服务名称,以编号port number显示-t 列出tcp网络封包的信息-l 列出目前正在网络监听listen服务-p 列出该网络服务的进程如果发现没有22端口进程,则执行如下命令sudo apt-get install openssh-server sudo apt-get install ufw sudo ufw enable sudo ufw allow 22 3、最后能xshell连接是否成功,如果还不行请检查服务器防火墙是否开启端口,像阿里云,腾讯云等都需要在把端口打开才可以的。
2023年-11月-20日
624 阅读
0 评论
技术
置顶
k8s新增用户并授权其可查看所有名称空间的pod的权限
本文记录了在k8s里新增用户并授权其可查看所有名称空间的pod的权限,当用户用此账号登陆后在k8s就只有查看Pods权限功能,而不能删除或者创建功能。一、ssl认证生成一个证书(1)生成一个私钥进入目录:cd /etc/kubernetes/pki/ 执行命令:(umask 077; openssl genrsa -out hiboy.key 2048)(2)生成一个证书请求openssl req -new -key hiboy.key -out hiboy.csr -subj "/CN=hiboy"(3)生成一个证书openssl x509 -req -in hiboy.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out hiboy.crt -days 3650二、在k8s里新增加一个用户账号:hiboy(1)把hiboy这个用户添加到kubernetes集群中,可以用来认证apiserver的连接[root@ctdmaster1 pki]# kubectl config set-credentials hiboy --client-certificate=./hiboy.crt --client-key=./hiboy.key --embed-certs=true(2)在kubeconfig下新增加一个hiboy账号context信息kubectl config set-context hiboy@kubernetes --cluster=kubernetes --user=hiboy(3)创建一个集群角色(clusterrole)[root@ctdmaster1 ~]# vim hiboy-clusterrole.yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:name: hiboy-get-podrules:apiGroups: [""]resources: ["pods"]verbs: ["get", "list", "watch"][root@ctdmaster1]# kubectl apply -f hiboy-clusterrole.yaml(4)创建一个clusterrolebinding[root@ctdmaster1]# kubectl create clusterrolebinding hiboy-get-pods --clusterrole=hiboy-get-pod --user=hiboy三、账号信息配置1、在系统添加一个hiboy的普通用户useradd hiboy #新增系统用户 hiboypasswd hiboy #设置hiboy登陆密码(hi135246)[root@ctdmaster1 ~]# useradd hiboy[root@ctdmaster1 ~]# passwd hiboy更改用户 hiboy 的密码 。新的 密码:重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。2、调整修改账号配置信息(不要直接修改root/.kube/config的信息,不然K8s会问题)复制一份k8s配置信息:cp -ar /root/.kube /tmp/修改/tmp/.kube/config文件,把kubernetes-admin和其他账号相关删除,只留hiboy用户并把current-context变成如下:current-context: hiboy@kubernetes3、把配置信息复制到hiboy目录下cp -ar /tmp/.kube/ /home/hiboy/chown -R hiboy.hiboy /home/hiboy/4、切换账号测试su - hiboykubectl get podskubectl get pods -n kube-system由上图可以,如果是新用户到hiboy登陆系统可以直接查到k8s里所有的pods信息,但是并不具备其他功能,如果需要其他权限也可以采取相类似的操作进行。
2023年-11月-18日
710 阅读
0 评论
技术
2023-11-16
DaemonSet学习
DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有新节点加入集群时, 会为他们新增一个DaemonSet的Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。daemonset的控制器会监听kuberntes的daemonset对象、pod对象、node对象,这些被监听的对象之变动,就会触发syncLoop循环让kubernetes集群朝着daemonset对象描述的状态进行演进Daemonset典型的应用场景在集群的每个节点上运行存储,比如:glusterd 或 ceph。在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat等。在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd等。DaemonSet使用案例:部署日志收集组件fluentd把fluentd-2-5-1.tar.gz上传到ctdmaster1和ctdnode1和ctdnode2上,解压[root@ctdmaster1 ds]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz[root@ctdnode1 ~]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz[root@ctdnode2 ~]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz创建yaml资源配置文件[root@ctdmaster1 ds]# vim daemonset.yamlapiVersion: apps/v1kind: DaemonSetmetadata:name: fluentd-elasticsearchnamespace: kube-systemlabels:k8s-app: fluentd-loggingspec:selector:matchLabels:name: fluentd-elasticsearchtemplate:metadata:name: fluentdlabels:name: fluentd-elasticsearchspec:tolerations:- key: node-role.kubernetes.io/master # effect: NoSchedule - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule containers: - name: fluentd-elasticsearch image: xianchao/fluentd:v2.5.1 imagePullPolicy: IfNotPresent resources: limits: memory: 200Mi requests: cpu: '1' memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers保存退出,执行:[root@ctdmaster1 ds]# kubectl apply -f daemonset.yaml
2023年-11月-16日
361 阅读
0 评论
技术
置顶
k8s存储类:storageclass
storageclass,存储类,是K8s工程师为了解决PV和PVC绑定的复杂繁琐问题,提供自动的PV策略机制,不同的存储类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。 存储类的作用就是创建PV的模板,而k8s集群管理员通过创建storageclass就可以动态生成一个存储卷pv供k8s pvc使用。每个 StorageClass 都包含 provisioner、parameters 和 reclaimPolicy 字段, 这些字段会在 StorageClass 需要动态制备 PersistentVolume 时会使用到。StorageClass 对象的命名很重要,用户使用这个命名来请求生成一个特定的类。 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数。StorageClass配置主要定义以下两部分:1、PV的属性 ,比如存储的大小、类型等;2、创建这种PV需要使用到的存储插件,比如Ceph、NFS等..StorageClass的字段[root@ctdmaster1 sfs]# kubectl explain storageclassKIND: StorageClassVERSION: storage.k8s.io/v1DESCRIPTION:StorageClass describes the parameters for a class of storage for whichPersistentVolumes can be dynamically provisioned.StorageClasses are non-namespaced; the name of the storage class accordingto etcd is in ObjectMeta.Name.FIELDS:allowVolumeExpansion allowedTopologies <[]Object>apiVersion kind metadata mountOptions <[]string>parameters <map[string]string>provisioner -required-reclaimPolicy volumeBindingMode provisioner:供应商,storageclass需要有一个供应者,用来确定我们使用什么样的存储来创建pv,常见的provisioner如下(https://kubernetes.io/zh/docs/concepts/storage/storage-classes/):provisioner既可以由内部供应商提供,也可以由外部供应商提供,以NFS为例,要想使用NFS,我们需要一个nfs-client的自动装载程序,称之为provisioner,这个程序会使用我们已经配置好的NFS服务器自动创建持久卷,也就是自动帮我们创建PV。安装nfs provisioner,用于配合存储类动态生成pv把nfs-subdir-external-provisioner.tar.gz上传到node1和node2,手动解压。ctr -n=k8s.io images import nfs-subdir-external-provisioner.tar.gz1、创建SA账号[root@ctdmaster1 storageclass]# vim serviceaccount.yamlapiVersion: v1kind: ServiceAccountmetadata:name: nfs-provisioner2、对SA账号授权3、安装配置provisioner程序1)创建挂载目录: [root@ctdmaster1 storageclass]# mkdir /data/nfs_pro -pv2)、修改nfs挂载目录3)、创建配置文件[root@ctdmaster1 storageclass]# vim nfs-deployment.yamlkind: DeploymentapiVersion: apps/v1metadata:name: nfs-provisionerspec:selector:matchLabels:app: nfs-provisionerreplicas: 1strategy:type: Recreatetemplate:metadata:labels:app: nfs-provisionerspec:serviceAccount: nfs-provisionercontainers:name: nfs-provisionerimage: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0imagePullPolicy: IfNotPresentvolumeMounts:name: nfs-client-rootmountPath: /persistentvolumesenv:name: PROVISIONER_NAMEvalue: example.com/nfsname: NFS_SERVERvalue: 192.168.40.160name: NFS_PATHvalue: /data/nfs_provolumes:name: nfs-client-rootnfs:server: 192.168.40.160path: /data/nfs_pro4)、执行更新provisioner配置[root@ctdmaster1 storageclass]# kubectl apply -f nfs-deployment.yamldeployment.apps/nfs-provisioner created5)、检查安装是否正常启动4、4.1创建storageclass,动态供给PV[root@ctdmaster1 storageclass]# vim nfs-storageclass.yaml[root@ctdmaster1 storageclass]# kubectl apply -f nfs-storageclass.yamlstorageclass.storage.k8s.io/nfs created4.2检查是否执行成功[root@ctdmaster1 storageclass]# kubectl get storageclassNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGEnfs example.com/nfs Delete Immediate false 5 创建pvc,通过storageclass动态生成pv
2023年-11月-14日
156 阅读
0 评论
未分类
2023-11-7
K8s的持久化存储学习
为什么要做持久化存储?因为在k8s中部署的应用都是以pod容器的形式运行的,假如部署MySQL、Redis等数据库也在pod里,需要对这些数据库产生的数据做备份。但是因为Pod是有生命周期的,如果Pod出现问题或者不小心被删除,往往会导致这些数据会随之消失,所以考虑到数据的安全以及长久的保留,就要考虑pod数据做持久化存储。K8s支持哪些存储K8s支持的存储对象是非常多的,我们可以通过命令查看: kubectl explain pods.epec.volumes|grep Object可以看得出,只要是网络上存的基本要都支持,但是比较常用的也就以下几种:1、emptyDir2、hostPath3、nfs4、persistentVolumeClaim(PVC)4、glusterfs5、cephfs6、configMap7、secret当然如果你有能力也可以自己开发新的存储方案。如何在K8s使用存储卷一般来说在K8s中想要使用存储卷,需要经历如下步骤1)、定义pod的volume,这个volume指明它要关联到哪个存储上的2)、在容器中要使用volumemounts挂载对应的存储emptyDiremptyDir类型的Volume是在Pod分配到Node上时被创建,Kubernetes会在Node上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除。emptyDir Volume主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录等。hostPathhostPath Volume是指Pod挂载宿主机上的目录或文件。 hostPath Volume使得容器可以使用宿主机的文件系统进行存储,hostpath(宿主机路径):节点级别的存储卷,在pod被删除,这个存储卷还是存在的,不会被删除,所以只要同一个pod被调度到同一个节点上来,在pod被删除重新被调度到这个节点之后,对应的数据依然是存在的。hostpath存储卷缺点:单节点,pod删除之后重新创建必须调度到同一个node节点,数据才不会丢失。NFSNFS,中文名网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样,用得较多的一种存储类型。Kubernetes 1.28 不包含 awsElasticBlockStore 卷类型Kubernetes 1.28 不包含 azureDiskKubernetes v1.21 已弃用Kubernetes 1.28 不包含 cinder 卷类型。Kubernetes v1.17 已弃用gcePersistentDiskgitRepo 卷类型已经被废弃portworxVolume Kubernetes v1.25已弃用Kubernetes v1.28 RBD CSI deprecatedvsphereVolume(已弃用)flexVolume(已弃用)Kubernetes v1.23 [deprecated]
2023年-11月-7日
273 阅读
0 评论
技术
置顶
创建Service资源(CLUSTER ip类型)实例记录
准备工作:把实验镜像包nginx.tar.gz上传到分节点ctdnode1和ctdnode2上,并导入镜像节点1: [root@ctdnode1 ~]# ctr -n=k8s.io images import nginx.tar.gz节点2: [root@ctdnode2 ~]# ctr -n=k8s.io images import nginx.tar.gz1、创建后端pod资源(使用准备好的nginx镜像)1)编写yaml文件:控制节点:[root@ctdmaster1 svc]# vim pod_test.yaml代码如下:apiVersion: apps/v1kind: Deploymentmetadata: name: my-nginxspec: selector: matchLabels: run: my-nginx replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 startupProbe: periodSeconds: 5 initialDelaySeconds: 60 timeoutSeconds: 10 httpGet: scheme: HTTP port: 80 path: / livenessProbe: periodSeconds: 5 initialDelaySeconds: 60 timeoutSeconds: 10 httpGet: scheme: HTTP port: 80 path: / readinessProbe: periodSeconds: 5 initialDelaySeconds: 60 timeoutSeconds: 10 httpGet: scheme: HTTP port: 80 path: /2)执行命令运行pod资源:控制节点: [root@ctdmaster1 svc]# kubectl apply -f pod_test.yaml 3)、查看运行情况:kubectl get pods -l run=my-nginx -o wide4)请求Pod资源测试目前 Pod资源的应用已经运行起来,但是仅限于集群内,外部无法访问,这里就需要创建Service资源作代理,将外部的访问请求转发到Pod上。(需要注意的是,pod虽然定义了容器端口,但是不会使用调度到该节点上的80端口,也不会使用任何特定的NAT规则去路由流量到Pod上。 这意味着可以在同一个节点上运行多个 Pod,使用相同的容器端口,并且可以从集群中任何其他的Pod或节点上使用IP的方式访问到它们。)2、创建service,做一个好代理。service的工作主要是通过endpoint与selector协同工作实现,由selector选择出pod的ip地址和端口号,然后记录在endpoint中,当有请求访问到service的ip地址时,就会从endpoint中选择出一个ip地址和端口号,然后将请求重定向至对应的pod中,具体会把请求代理到哪个pod,那就是kube-proxy的轮询来实现的。service不会直接到pod,service是直接到endpoint资源,就是地址加端口,再由endpoint再关联到pod。1)创建Service资源yaml文件,控制节点:[root@ctdmaster1 svc]# vim service_test.yamlapiVersion: v1kind: Servicemetadata: name: my-nginx labels: run: my-nginxspec: type: ClusterIP ports: - port: 80 protocol: TCP targetPort: 80 selector: run: my-nginx我们创建一个 Service,具有标签run=my-nginx的Pod,目标TCP端口 80,并且开放一个抽象的Service端口(targetPort:容器接收流量的端口;port:抽象的 Service 端口,可以使任何其它 Pod访问该 Service 的端口)2)、保存退出生,运行Service资源, [root@ctdmaster1 svc]# kubectl apply -f service_test.yaml3)、查看运行情况:[root@ctdmaster1 svc]# kubectl get svc -l run=my-nginxService资源已经运行正常,集群IP地址是:10.97.128.704)、请求Service,测试结果:curl 10.97.128.70由上图可以看到,访问Service的IP请求到的资源跟之前请求pod节点上的资源,得到的结果是一样的。我们测试下,删除一个pod资源,请求Service看看访问结果有没有变。如下图:注意:上面的10.97.128.70:80地址只能是在集群(因为定义的是CLUSTER-IP类型)内部可以访问,在外部还是无法访问,也就是想要通过浏览器访问,那么是访问不通的,如果想要在k8s集群之外访问,是需要把service type类型改成nodePort。最后,有关Service域名其实Service只要创建完成,我们就可以直接解析它的服务名,每一个服务创建完成后都会在集群dns中动态添加一个资源记录,添加完成后我们就可以解析了,资源记录格式是:SVC_NAME.NS_NAME.DOMAIN.LTD.服务名.命名空间.域名后缀集群默认的域名后缀是svc.cluster.local.就像我们上面创建的my-nginx这个服务,它的完整名称解析就是my-nginx.default.svc.cluster.local这个记录好像只有pod内部可以访问,外部无法访问。大家思考下,是不是这样呢?
2023年-11月-6日
268 阅读
0 评论
技术
2023-11-5
K8s里什么是无头服务headless?
『无头服务』即 Kubernetes 中的 Headless Service。Service 是 Kubernetes 对后端一组提供相同服务的 Pod 的逻辑抽象和访问入口。在某些应用场景中,若需要人为指定负载均衡器,不使用 Service 提供的默认负载均衡的功能,或者应用程序希望知道属于同组服务的其他实例。可以通过无头服务实现。Kubernetes 提供了 Headless Service 来实现这种功能,即不为 Service 设置 ClusterIP(入口 IP 地址),仅通过 Label Selector 将后端的 Pod 列表返回给调用的客户端。在nacos集群的资源清单文件,通过selector字段 matchlabels为:app=nacos 。设置了label selector之后,Kubernetes则会根据label selector查询pod列表 自动创建endpoint列表,将服务名(DNS域名)的解析机制配置为:当客户端访问服务名是,得到的是endpoint列表(而不是一个确定的IP地址)也可以回答一、Headless Service概念在某些应用场景中,客户端不需要通过Kubernetes内置的Service实现负载均衡功能,或者需要自行完成对服务后端各个实例的服务发现机制,或者需要自行实现负载均衡功能,可以通过创建特殊的名为“Headless”的服务实现。Headless Service的概念是这种服务没有入口访问地址(无ClusterIP地址),kube-proxy不会为其创建负载转发规则,而服务名(DNS域名)的解析机制取决于该Headless Service是否设置了Label Selector。二、Headless Service设置Label Selector如果Headless Service设置了Label Selector,Kubernetes则将根据Label Selector查询后端Pod列表,自动创建Endpoint列表,将服务名(DNS域名)的解析机制配置为:当客户端访问该服务名时,得到是全部Endpoint列表(而不是一个确定的IP地址)三、Headless Service未设置Label Selector如果Headless Service没有设置Label Selector,则Kubernetes不会自动创建对应的Endpoint列表。DNS系统会根据下列条件设置DNS记录。如果Service类型为ExternalName,则对服务名访问将直接被DNS系统转为Service设置的外部(externalName);如果系统中存在与Service同名的Endpoint定义,则服务名将被解析为Endpoint定义中的列表,适用于非ExternnalName类型的Service————————————————参考的博文https://blog.csdn.net/GaoChuang_/article/details/121313534
2023年-11月-5日
289 阅读
0 评论
技术
2023-11-5
Kubernetes 100个常用命令!
这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。 列出了 100 个 Kubectl 命令,这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于: • 集群信息 • Pod 诊断 • 服务诊断 • 部署诊断 • 网络诊断 • 持久卷和持久卷声明诊断 • 资源使用情况 • 安全和授权 • 节点故障排除 • 其他诊断命令:文章还提到了许多其他命令,如资源扩展和自动扩展、作业和定时作业诊断、Pod 亲和性和反亲和性规则、RBAC 和安全、服务账号诊断、节点排空和取消排空、资源清理等。 集群信息: 1. 显示 Kubernetes 版本:kubectl version 2. 显示集群信息:kubectl cluster-info 3. 列出集群中的所有节点:kubectl get nodes 4. 查看一个具体的节点详情:kubectl describe node 5. 列出所有命名空间:kubectl get namespaces /kubectl get ns 6. 列出所有命名空间中的所有 pod:kubectl get pods --all-namespaces Pod 诊断: 1. 列出特定命名空间中的 pod:kubectl get pods -n 2. 查看一个 Pod 详情:kubectl describe pod -n 3. 查看 Pod 日志:kubectl logs -n 4. 尾部 Pod 日志:kubectl logs -f -n 5. 在 pod 中执行命令:kubectl exec -it -n -- Pod 健康检查: 1. 检查 Pod 准备情况:kubectl get pods -n -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' 2. 检查 Pod 事件:kubectl get events -n --field-selector involvedObject.name= Service诊断: 1. 列出命名空间中的所有服务:kubectl get svc -n 2. 查看一个服务详情:kubectl describe svc -n Deployment诊断: 1. 列出命名空间中的所有Deployment:kubectl get deployments -n 2. 查看一个Deployment详情:kubectl describe deployment -n 3. 查看滚动发布状态:kubectl rollout status deployment/ -n 4. 查看滚动发布历史记录:kubectl rollout history deployment/ -n StatefulSet诊断: 1. 列出命名空间中的所有 StatefulSet:kubectl get statefulsets -n 2. 查看一个 StatefulSet详情:kubectl describe statefulset -n ConfigMap 和Secret诊断: 1. 列出命名空间中的 ConfigMap:kubectl get configmaps -n 2. 查看一个ConfigMap详情:kubectl describe configmap -n 3. 列出命名空间中的 Secret:kubectl get secrets -n 4. 查看一个Secret详情:kubectl describe secret -n 命名空间诊断: 1. 查看一个命名空间详情:kubectl describe namespace 资源使用情况: 1. 检查 pod 的资源使用情况:kubectl top pod -n 2. 检查节点资源使用情况:kubectl top nodes 图片 网络诊断: 1. 显示命名空间中 Pod 的 IP 地址:kubectl get pods -n -o custom-columns=POD:metadata.name,IP:status.podIP --no-headers 2. 列出命名空间中的所有网络策略:kubectl get networkpolicies -n 3. 查看一个网络策略详情:kubectl describe networkpolicy -n 持久卷 (PV) 和持久卷声明 (PVC) 诊断: 1. 列出PV:kubectl get pv 2. 查看一个PV详情:kubectl describe pv 3. 列出命名空间中的 PVC:kubectl get pvc -n 4. 查看PVC详情:kubectl describe pvc -n 节点诊断: 1. 获取特定节点上运行的 Pod 列表:kubectl get pods --field-selector spec.nodeName= -n 资源配额和限制: 1. 列出命名空间中的资源配额:kubectl get resourcequotas -n 2. 查看一个资源配额详情:kubectl describe resourcequota -n 自定义资源定义 (CRD) 诊断: 1. 列出命名空间中的自定义资源:kubectl get -n 2. 查看自定义资源详情:kubectl describe -n 使用这些命令时,请记住将, , , , , , , , , , , , , , 和替换为你的特定值。 这些命令应该可以帮助你诊断 Kubernetes 集群以及在其中运行的应用程序。 资源伸缩和自动伸缩 1. Deployment伸缩:kubectl scale deployment --replicas= -n 2. 设置Deployment的自动伸缩:kubectl autoscale deployment --min= --max= --cpu-percent= -n 3. 检查水平伸缩器状态:kubectl get hpa -n 作业和 CronJob 诊断: 1. 列出命名空间中的所有作业:kubectl get jobs -n 2. 查看一份工作详情:kubectl describe job -n 3. 列出命名空间中的所有 cron 作业:kubectl get cronjobs -n 4. 查看一个 cron 作业详情:kubectl describe cronjob -n 容量诊断: 1. 列出按容量排序的持久卷 (PV):kubectl get pv --sort-by=.spec.capacity.storage 2. 查看PV回收策略:kubectl get pv -o=jsonpath='{.spec.persistentVolumeReclaimPolicy}' 3. 列出所有存储类别:kubectl get storageclasses Ingress和服务网格诊断: 1. 列出命名空间中的所有Ingress:kubectl get ingress -n 2. 查看一个Ingress详情:kubectl describe ingress -n 3. 列出命名空间中的所有 VirtualServices (Istio):kubectl get virtualservices -n 4. 查看一个 VirtualService (Istio)详情:kubectl describe virtualservice -n Pod 网络故障排除: 1. 运行网络诊断 Pod(例如 busybox)进行调试:kubectl run -it --rm --restart=Never --image=busybox net-debug-pod -- /bin/sh 2. 测试从 Pod 到特定端点的连接:kubectl exec -it -n -- curl 3. 跟踪从一个 Pod 到另一个 Pod 的网络路径:kubectl exec -it -n -- traceroute 4. 检查 Pod 的 DNS 解析:kubectl exec -it -n -- nslookup 配置和资源验证: 1. 验证 Kubernetes YAML 文件而不应用它:kubectl apply --dry-run=client -f 2. 验证 pod 的安全上下文和功能:kubectl auth can-i list pods --as=system:serviceaccount:: RBAC 和安全性: 1. 列出命名空间中的角色和角色绑定:kubectl get roles,rolebindings -n 2. 查看角色或角色绑定详情:kubectl describe role -n 服务帐户诊断: 1. 列出命名空间中的服务帐户:kubectl get serviceaccounts -n 2. 查看一个服务帐户详情:kubectl describe serviceaccount -n 清空节点和解除封锁: 1. 清空节点以进行维护:kubectl drain --ignore-daemonsets 2. 解除对节点的封锁:kubectl uncordon 资源清理: 1. 强制删除 pod(不推荐):kubectl delete pod -n --grace-period=0 --force Pod 亲和性和反亲和性: 1. 列出 pod 的 pod 亲和性规则:kubectl get pod -n -o=jsonpath='{.spec.affinity}' 2. 列出 pod 的 pod 反亲和性规则:kubectl get pod -n -o=jsonpath='{.spec.affinity.podAntiAffinity}' Pod 安全策略 (PSP): 1. 列出所有 Pod 安全策略(如果启用):kubectl get psp 事件: 1. 查看最近的集群事件:kubectl get events --sort-by=.metadata.creationTimestamp 2. 按特定命名空间过滤事件:kubectl get events -n 节点故障排除: 1. 检查节点情况:kubectl describe node | grep Conditions -A5 2. 列出节点容量和可分配资源:kubectl describe node | grep -E "Capacity|Allocatable" 临时容器(Kubernetes 1.18+): 1. 运行临时调试容器:kubectl debug -it -n --image= -- /bin/sh 资源指标(需要指标服务器): 1. 获取 Pod 的 CPU 和内存使用情况:kubectl top pod -n kuelet诊断: 1. 查看节点上的kubelet日志:kubectl logs -n kube-system kubelet- 使用Telepresence 进行高级调试: 1. 使用 Telepresence 调试 pod:telepresence --namespace --swap-deployment 图片 Kubeconfig 和上下文: 1. 列出可用的上下文:kubectl config get-contexts 2. 切换到不同的上下文:kubectl config use-context Pod 安全标准(PodSecurity 准入控制器): 1. 列出 PodSecurityPolicy (PSP) 违规行为:kubectl get psp -A | grep -vE 'NAME|REVIEWED' Pod 中断预算 (PDB) 诊断: 1. 列出命名空间中的所有 PDB:kubectl get pdb -n 2. 查看一个PDB详情:kubectl describe pdb -n 资源锁诊断(如果使用资源锁): 1. 列出命名空间中的资源锁:kubectl get resourcelocks -n 服务端点和 DNS: 1. 列出服务的服务端点:kubectl get endpoints -n 2. 检查 Pod 中的 DNS 配置:kubectl exec -it -n -- cat /etc/resolv.conf 自定义指标(Prometheus、Grafana): 1. 查询Prometheus指标:用于kubectl port-forward访问Prometheus和Grafana服务来查询自定义指标。 Pod 优先级和抢占: 1. 列出优先级:kubectl get priorityclasses Pod 开销(Kubernetes 1.18+): 1. 列出 pod 中的开销:kubectl get pod -n -o=jsonpath='{.spec.overhead}' 存储卷快照诊断(如果使用存储卷快照): 1. 列出存储卷快照:kubectl get volumesnapshot -n 2. 查看存储卷快照详情:kubectl describe volumesnapshot -n 资源反序列化诊断: 1. 反序列化并打印 Kubernetes 资源:kubectl get -n -o=json 节点污点: 1. 列出节点污点:kubectl describe node | grep Taints 更改和验证 Webhook 配置: 1. 列出变异 webhook 配置:kubectl get mutatingwebhookconfigurations 2. 列出验证 Webhook 配置:kubectl get validatingwebhookconfigurations Pod 网络策略: 1. 列出命名空间中的 pod 网络策略:kubectl get networkpolicies -n 节点条件(Kubernetes 1.17+): 1. 自定义查询输出:kubectl get nodes -o custom-columns=NODE:.metadata.name,READY:.status.conditions[?(@.type=="Ready")].status -l 'node-role.kubernetes.io/worker=' 审核日志: 1. 检索审核日志(如果启用):检查 Kubernetes 审核日志配置以了解审核日志的位置。 节点操作系统详细信息: 1. 获取节点的操作系统信息:kubectl get node -o jsonpath='{.status.nodeInfo.osImage}' 这些命令应该涵盖 Kubernetes 中的各种诊断场景。确保将、、等占位符替换为你的集群和用例的实际值。来源:K8S中文社区
2023年-11月-5日
353 阅读
0 评论
技术
2023-11-4
K8S的设计结构
K8S的设计结构大致可分为下列三大部分Client: 属于用户触发请求的客户端,即Kubectl, 用户的各种触发的命令就是通过kuberctl统一封装后进行命令触发的Master:用于处理用户触发的请求,进行处理决策,Worker:命令真正的执行者,读取etcd的结果将数据最终执行K8S设计结构图ClientKubectl: 是k8s 的client,也是一般RD 最常用的操作方式之一,很多K8S的使用者主要就是通过kubectl跟K8S打交道。UI:Dashboard 也是一个独立服务,默认可以不需要,这个服务本身可以通过Kubectl部署在k8s上对外提供服务。MasterApiServer:Master 通信的入口, Client 和 Worker 之前同行ETCD:Master中唯一的决策结果的存储Controller Manager:里面保存各种controllerScheduler:执行实例资源的选择调度决策, 选择出合适的Worker节点来运行服务的Pod,真正的部署操作由Kubelet来执行WorkerKubelet:直接通过ApiServer的watch接口读取原始数据结果KubeProxy:网络请求通过Kubeproxy实现服务接口的转发,作为普通服务的命名管理Pod:将容器、网络和存储单元打包在一起,是服务独立的部署单元。核心思路是高内聚Container:原始服务容器,容器与pod 的对应关系是一个Pod中包含多个容器,多个容器之间的服务可以互相访问核心理念:K8s 设计的核心理念最终概括为4大点: 声明式、显示接口、无入侵性 和 可移植性声明式:对比指令式,需求任何功能通过yml文件来描述自己的需求,最终由k8s调度满足显示接口:任何接口定义都属于显示定义,不存在私有接口,所以给业务CRD 自定义提供前提, 每个K8s 可以根据自己的需求和现有的功能实现自己的服务功能无入侵性:该特点就是说任何服务部署只要提前打包好docker 的image ,是不需要再做任何代码改造,就可以完成部署。可移植性:可移植性主要是强调对于有状态的服务,通过PersistentVolume 支持屏蔽底层的数据存储细节
2023年-11月-4日
343 阅读
0 评论
技术
2023-11-3
金丝雀发布(又称灰度发布、灰度更新)
金丝雀发布的由来:17 世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;当瓦斯含量超过一定限度时,虽然人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为瓦斯检测指标,以便在危险状况下紧急撤离。所在金丝雀发布也是采取类似的流程,在发布过程中,一般先发1台,或者一个小比例,例如2%的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试 (国内常称灰度测试),如果发现有问题,立马暂停发布,并回滚版本,并排查出错节点信息,并找到其原因,如果一切正常,则继续发布,直到完全更新。金丝雀发布步骤:步骤一:将流量从待部署节点移出,更新该节点服务到待发布状态,将该节点称为金丝雀节点;步骤二:根据不同策略,将流量引入金丝雀节点。策略可以根据情况指定,比如随机样本策略(随机引入)、狗粮策略(就是内部用户或员工先尝鲜)、分区策略(不同区域用户使用不同版本)、用户特征策略(这种比较复杂,需要根据用户个人资料和特征进行分流,类似于千人千面);步骤三:金丝雀节点验证通过后,选取更多的节点称为金丝雀节点,重复步骤一和步骤二,直到所有节点全部更新金丝雀部署和蓝绿有点像,但是它更加规避风险。你可以阶段性的进行,而不用一次性从蓝色版本切换到绿色版本。采用金丝雀部署,你可以在生产环境的基础设施中小范围的部署新的应用代码。一旦应用签署发布,只有少数用户被路由到它。最大限度的降低影响。如果没有错误发生,新版本可以逐渐推广到整个基础设施。金丝雀和蓝绿的对比
2023年-11月-3日
419 阅读
0 评论
技术
1
2
3
4
5