linux 100个问答81~101 主要是k8s相关
·
81.如何查看docker registry API
查看
Docker Registry
的
API
主要涉及两个步骤:⾸先确保你有⼀个运⾏的
Docker Registry
(例如, Docker Hub、
Quay.io
、或你⾃⼰的私有
registry
),然后使⽤
HTTP
请求来查询其
API
。
以下是如何查看
Docker Registry API
的步骤:
1.
启动
Docker Registry
(如果你还没有⼀个)
:
如果你还没有运⾏的
Docker Registry
,你可以快速启动⼀个。例如,运行一个官方的
Docker Registry 容器:
docker run -d -p 5000:5000 --name registry registry:2
2.
使⽤
HTTP
⼯具查询
API
:
Docker Registry API
是
RESTful API
,你可以使用任何
HTTP 工具
来查询它,例如
curl
。
3.
查看官⽅⽂档
:
Docker Registry API
的官⽅⽂档详细描述了所有可⽤的
API
端点、请求和响应格式。你可以在
Docker
的官⽅⽹站上找到这些信息:
https://docs.docker.com/registry/spec/api/
请注意,如果你正在查询⾮本地的
Docker Registry
,例如
Docker Hub
,你可能需要提供身份验证信息,
并确保你的账户有权限访问所需的资源。
总之,
Docker Registry API
提供了丰富的功能,允许你查询和操作容器镜像,使镜像的管理和⾃动化更为容易。
82.k8s控制平⾯有什么组件
Kubernetes
(简称
K8s
)的控制平⾯(
Control Plane
)是由多个组件组成的,它们共同确保
Kubernetes
集群的正常运⾏和管理。控制平⾯的组件作出全局决策,例如调度,以及检测和响应集群范围内的事件(例如,启动新的 pod
,因为部署的
replicas
字段没有满⾜)。
以下是
Kubernetes
控制平⾯的主要组件:
1.
kube-apiserver
:
Kubernetes API
服务器是控制平⾯的⼊⼝点。它是
Kubernetes API
的主实现,通过它,⽤户和内部组件都与 Kubernetes
交互。
2.
etcd
:
etcd
是⼀个⼀致性和⾼可⽤性的键值存储,⽤于保存所有集群数据。它是
Kubernetes
中的
"
真实来源"
,保存了整个集群的状态。
3.
kube-scheduler
:
负责监视新创建的、尚未被运⾏的
Pods
,并选择⼀个
Node
供它们运⾏。调度决策考虑到资源需
求、硬件
/
软件
/
策略约束、负载均衡、亲和性和反亲和性等因素。
4.
kube-controller-manager
:
运⾏控制器进程。逻辑上,每个控制器是⼀个单独的进程,但为了降低复杂性,它们都被编译到
同⼀个⼆进制⽂件,并在单独的进程中运⾏。这些控制器包括:
Node
控制器、
Replication
控制
器、
Endpoints
控制器、
Service Account & Token
控制器等。
5.
cloud-controller-manager
:
该组件与底层云提供商的接⼝,与云提供商交互以管理那些在云上运⾏的基础设施,例如虚拟
机、⽹络、存储等。只有在
Kubernetes
运⾏在云提供商上时,才会使⽤此组件。
6.
kubelet
(
虽然它实际上运⾏在每个
Node
上,但仍然被认为是控制平⾯的⼀部分
)
:
运⾏在集群中每个节点上,确保容器运⾏在
Pod
中。
kubelet
接收
Pod
的配置(主要是通过
kube-
apiserver
),确保这些
Pod
中的容器的状态与配置匹配。
7.
kube-proxy
(
和
kubelet
⼀样,它在每个
Node
上运⾏,但在某种程度上与控制平⾯交互
)
:
是⽹络代理运⾏在每个节点上,负责为服务实现
Kubernetes
的
Service
概念。
要确保控制平⾯的⾼可⽤性,可以运⾏多个
kube-apiserver
和
etcd
实例。然⽽,⼤多数其他控制平⾯组件则是⽆状态的,通常在集群中运⾏⼀个或更少的实例。
83.k8s-node节点运⾏什么组件
在
Kubernetes
(
K8s
)集群的每个节点上,通常会运⾏以下组件:
1.
kubelet
:
kubelet
是
Kubernetes
中的主要节点代理,负责管理节点上的容器。它会定期拉取
Pod
配置,启动和停⽌容器,监控容器的健康状态,并将节点的状态报告给控制平⾯。
2.
kube-proxy
:
kube-proxy
负责维护节点上的⽹络代理规则,以确保在
Pod
之间进⾏⽹络通信时能够正确路由流量。它会监视 Kubernetes
服务定义,创建负载均衡规则,并管理
iptables
规则以实现服务发现和负载均衡。
3.
Container Runtime
:
K8s
节点上需要⼀个容器运⾏时来实际运⾏容器。
Docker
是最常⻅的容器运⾏时,但也可以选择其他容器运⾏时,如 containerd
或
CRI-O
。
4.
CNI
插件
:容器⽹络接⼝(
Container Network Interface
,
CNI
)插件是负责配置和管理
Pod
⽹络的组件。它确保不同 Pod
之间可以通信,并与集群内部和外部的⽹络进⾏正确连接。
5.
监控和⽇志收集代理
:通常,
K8s
节点上还会运⾏监控和⽇志收集代理,如
Prometheus
、
Grafana
、 Fluentd、或
Elasticsearch
等,以帮助监视和收集集群中的性能数据和⽇志。
6.
Node Problem Detector
:这是⼀个可选组件,⽤于检测节点上的问题,例如硬件故障或节点状态变化,并将这些信息发送给 K8s
控制平⾯以进⾏处理。
7.
其他附加组件
:根据集群的具体需求,还可以在节点上运⾏其他附加组件,如
GPU
驱动程序、存储插件、安全代理等。
这些组件⼀起协同⼯作,以保证
Kubernetes
集群的正常运⾏和管理。每个节点上都有这些组件,它们将节点转化为 Kubernetes
集群的⼀部分,提供容器编排和管理的功能。
84.kubectl常⽤命令

5.
kubectl delete
:⽤于删除资源。
11.
kubectl config
:⽤于管理
kubectl
的配置⽂件,包括切换上下⽂等。
kubectl config use-context <context-name> # 切换上下⽂
85.解释k8s的namespace作用
86.k8s排错思路


87.k8s怎么创建容器
要在
Kubernetes
中创建容器,通常需要以下步骤:
1.
编写容器应⽤的描述⽂件
:通常使⽤
YAML文件
编写⼀个叫做
Pod
的描述⽂件,描述容器的镜像、资源需求、环境变量、卷挂载等信息。示例:


88.k8s有哪些控制器
Kubernetes (k8s)
包括⼀组控制器,它们各⾃负责维护系统中特定资源的期望状态。控制器通常在
kube-controller-manager 中作为⼀个组件运⾏,其中包括多个控制循环。以下是
Kubernetes
中常⻅的控制器:
1.
ReplicaSet Controller
:
确保定义在
ReplicaSet
中的
Pod
副本数量与实际运⾏的数量匹配。
2.
Deployment Controller
:
提供声明式的
Pod
更新。它允许⽤户定义所需的
Pod
副本数、更新策略和其他相关设置。
3.
StatefulSet Controller
:
⽤于管理有状态应⽤,如数据库。它确保每个
Pod
有⼀个持久且独特的标识符。
4.
DaemonSet Controller
:
确保所有(或某些)
Node
运⾏⼀个
Pod
的拷⻉。当有
Node
加⼊集群时,⼀个新的
Pod
会被调
度到这个
Node
;当有
Node
从集群中移除时,这些
Pod
将被垃圾收集。
5.
Job Controller
:
⽤于⼀次性任务。它确保任务成功完成。
6.
CronJob Controller
:
类似于
Job
,但是它是基于时间调度的(例如,每天凌晨
2
点)。
7.
Service Controller
:
负责监控
Service
对象的变化,并根据其定义创建、更新和删除
Endpoint
对象。
8.
Endpoints Controller
:
将
Service
与
Pod
关联,确保正确的
Pods
被添加到
Service
的
Endpoints
中。
9.
Node Controller
:
在⼀个
Node
变得不可达时,负责监控
Node
的健康状况并在必要时进⾏修复。
10.
Persistent Volume (PV) Controller
:
负责处理
Persistent Volume
和
Persistent Volume Claim
的绑定。
11.
Namespace Controller
:
负责在删除⼀个
namespace
时,清除所有属于该
namespace
的资源。
12.
ServiceAccount Controller
:
在创建
namespace
时,为新
namespace
创建默认的
ServiceAccount
。
13.
TTL Controller
:
⾃动清理结束的资源对象,例如已完成的
Jobs
。
这只是
Kubernetes
中的⼀部分控制器,实际上
Kubernetes
允许扩展,并添加⾃定义的控制器来扩展其功能。这种架构使得 Kubernetes
⾮常灵活,并能够满⾜各种各样的⼯作负载和需求。
89.如何运维k8s的污点
在
Kubernetes
中,
"
污点
"
(
Taints
)是⼀种⽅式,⽤于向
Node
(节点)添加标签,以表示该
Node
上不希望运⾏特定类型的Pod
。如果
Node
上存在污点,只有具有相应容忍度的
Pod
才能在该
Node
上运⾏。
要运维
Kubernetes
的污点,可以使⽤以下步骤:
1.
查看节点的污点:⾸先,使用以下命令查看节点的污点信息:
kubectl describe nodes <node-name>
这将列出节点上的污点,以及它们的键和值。污点通常具有键值对,例如
key=value
,⽤于标识
节点的特性。
2.
添加污点
:要添加污点,您需要编辑节点对象并添加适当的
taints
字段。编辑节点对象的命令如
下:
kubectl edit node <node-name>
在编辑器中,找到
spec
下的
taints
字段,然后添加您希望的污点。例如:
spec:
taints:
- key: example.com/special
value: node-1
effect: NoSchedule
上述示例添加了⼀个名为
example.com/special
的污点,它的值为
node-1
,并且
effect
设置为
NoSchedule
,表示
Pod
需要具有相应的容忍度才能在这个节点上调度。
3.
为
Pod
添加容忍度
:要允许
Pod
在带有污点的节点上运⾏,需要在
Pod
的描述⽂件中添加适当的容忍度规则。例如:
tolerations:
- key: example.com/special
operator: Equal
value: node-1
effect: NoSchedule
上述示例中,容忍度规则与节点上的污点匹配,这样
Pod
就能够在该节点上调度。
4.
验证效果
:创建或修改
Pod
的描述⽂件后,使⽤
kubectl apply
命令或其他适当的命令来创建
或更新
Pod
。然后,检查
Pod
是否成功调度到了带有污点的节点上:
bashCopy code
kubectl get pods -o wide
这将显示所有
Pod
及其所在的节点。
通过这些步骤,您可以成功运维
Kubernetes
中的节点污点,以限制特定类型的
Pod
在节点上的调度。请注意,污点和容忍度是Kubernetes
中⽤于控制
Pod
调度的⼀种⾼级策略,需要谨慎使⽤,确保不会导致应⽤程序⽆法正常⼯作。
90.如何扩容pod

在打开的编辑器中,找到
replicas
字段并更改它的值。保存并退出编辑器后,更改会⾃动应
⽤。
4.
使⽤
Kubernetes
的⾃动扩展功能
:
Kubernetes
提供了
Horizontal Pod Autoscaler
(
HPA
),它可以⾃动根据 CPU
利⽤率或其他选择的指标来扩展应⽤程序。
例如,创建⼀个
HPA
,⾃动扩展⼀个
Deployment
,基于
CPU
利⽤率:

91.如何实时修改k8s资源
要实时修改
Kubernetes
资源,您可以使⽤
kubectl
命令⾏⼯具,并利⽤
kubectl apply
来更新
资源的配置。这适⽤于⼤多数
Kubernetes
资源,如
Deployments
、
ConfigMaps
、
Services
等。
下⾯是⼀些步骤,演示如何实时修改
Kubernetes
资源:
1.
使⽤编辑器编辑资源配置
:⾸先,使⽤您喜欢的⽂本编辑器打开要修改的资源配置⽂件。例如,要编辑名为
my-deployment.yaml
的
Deployment
资源,可以运⾏:
kubectl rollout status deployment my-deployment
这会告诉您滚动更新是否已成功完成。
通过这些步骤,您可以实时修改
Kubernetes
资源,并确保更改能够安全地应⽤到您的集群中。请注
意,根据资源的类型和复杂性,可能需要⼀些时间来完成更改,特别是在⼤规模部署中。
92.如何更新与回滚k8s应⽤
在
Kubernetes
中,应⽤程序的更新和回滚通常是通过
Deployment
资源来管理的。以下是如何执⾏更新和回滚操作的步骤:
更新
Kubernetes
应⽤程序:
1.
使⽤
YAML
⽂件更新
:
修改
Deployment
定义的
YAML
⽂件,例如更改容器镜像版本。
使⽤
kubectl apply -f <YOUR_DEPLOYMENT_FILE>.yaml
命令将更改应用到集群。
2.
直接使⽤
kubectl
命令更新
: 如果只是想快速更改容器的镜像,可以使⽤
kubectl set image
:
kubectl set image deployment/<DEPLOYMENT_NAME>
<CONTAINER_NAME>=<NEW_IMAGE>:<TAG>
3.
监控更新的进度
: 使⽤
kubectl rollout status deployment/<DEPLOYMENT_NAME>
来查看更新的进度。
回滚
Kubernetes
应⽤程序:
1.
使⽤
kubectl rollout
: 如果你刚刚进⾏了⼀个更新,但发现有问题,你可以使⽤以下命令快速回滚到上⼀个版本:
kubectl rollout undo deployment/<DEPLOYMENT_NAME>
2.
回滚到特定的修订版本
: ⾸先,你可以列出
Deployment
的修订历史
kubectl rollout history deployment/<DEPLOYMENT_NAME>
93.怎么查看k8s应用历史版本


94.手写⼀个简单的k8s声名式yaml


95.解释k8s的pod原理,生命周期


96.解释pod创建流程

97.解释k8s服务发现
在
Kubernetes (k8s)
中,服务发现是核⼼概念之⼀。由于
Pods
是短暂的,并且经常被销毁和重建, Kubernetes 提供了
Service
对象作为稳定的⽹络端点来访问⼀组
Pod
。通过这种⽅式,其他应⽤或
Pod
可以找到并与其通信,⽽⽆需关⼼背后的 Pod
实际上在哪⾥运⾏或其
IP
地址是什么。
1.
Service
对象
:
当你创建⼀个
Service
,
Kubernetes
控制平⾯会为该
Service
分配⼀个唯⼀的、稳定的
IP
地址(称为 ClusterIP
)。
Service
通过标签选择器来选择后端
Pod
,并使⽤
ClusterIP
转发到这些
Pod
的请求。
2.
DNS
解析
:
在⼤多数
Kubernetes
集群中,安装了⼀个叫
CoreDNS
(或
kube-dns
)的插件,它为
Service
提供DNS 名称解析。
默认情况下,⼀个
Service
会有⼀个
DNS
名称,格式为
<service-name>.<namespac
e>.svc.cluster.local
。因此,任何集群内的
Pod
都可以简单地使⽤此
DNS
名称来解
析到
Service
的
IP
地址。
3.
环境变量
:
对于在
Pod
启动时已存在的
Service
,
Kubernetes
将为每个
Service
设置⼀组环境变量到每个
Pod
。这使得
Pod
内的应⽤程序可以使⽤这些环境变量来发现其他服务。
4.
Headless Service
:
如果你不需要
Load-Balancing
或单⼀服务
IP
,并且只想使⽤
DNS
来解析到
Pod
的
IP
地址,可以使⽤⽆头服务(Headless Service
)。
⽆头服务没有
ClusterIP
,
DNS
查询会直接解析到后端
Pod
的
IP
地址。
5.
NodePort
和
LoadBalancer
:
NodePort
是⼀种使
Service
能够在每个
Node
的指定端⼝上接受外部流量的⽅式。
LoadBalancer
通常与云提供商⼀起使⽤,为
Service
提供⼀个外部负载均衡器的
IP
。
6.
EndpointSlices
:
EndpointSlices
是
Kubernetes
中的⼀个新对象,提供了⼀种更可扩展和可扩展的⽅式来跟踪⽹络端点。
通过以上机制,
Kubernetes
使得服务发现在集群内部变得相对简单。应⽤程序或服务只需要知道要连接的服务的名称,⽽不必担⼼它们实际在哪⾥运⾏或它们的实际 IP
地址。
98.解释k8s标签功能

99.解释k8s如何做七层代理
在
Kubernetes (k8s)
中,七层代理通常是通过
Ingress
资源和
Ingress
控制器来实现的。与传统的四层代理(基于 IP
和端⼝)不同,七层代理可以基于
HTTP/HTTPS
的头信息、路径、域名等进⾏路由决策。
1.
Ingress
资源
:
Ingress
资源定义了如何通过外部访问到集群中的服务:
定义哪些路径(如
/api, /app
)路由到哪些服务。
定义基于哪些主机名(如
example.com, api.example.com
)进⾏路由。
定义
SSL/TLS
证书等。
2.
Ingress
控制器
:
Ingress
控制器负责实现
Ingress
资源的规则。当你创建⼀个
Ingress
资源时,
Ingress
控制器负责提供功能,
使得外部请求可以基于定义的规则路由到正确的内部服务。
常见的七层代理解决⽅案
/Ingress
控制器包括:
Nginx Ingress Controller
:
使⽤
Nginx
作为反向代理,⽀持负载均衡、
SSL
、重写规则等。
Traefik
:
⼀个现代的
HTTP
反向代理和负载均衡器。
HAProxy Ingress
:
基于
HAProxy
的
Ingress
控制器。
Kong
:
提供
API
⽹关功能,除了基本路由外,还提供插件驱动的平台功能。
Istio/Linkerd
:
作为服务⽹格解决⽅案,这些⼯具不仅仅是七层代理,它们还提供了⾼级的流量管理、安全性和观察性功能。
如何使⽤七层代理:
1.
安装
Ingress
控制器
:
根据你的选择(例如
Nginx, Traefik
)部署相应的
Ingress
控制器到
k8s
集群。
2.
定义
Ingress
资源
:
创建⼀个
Ingress
资源,定义你的路由规则,如基于路径、主机名等。
3.
应⽤
SSL/TLS
:
可以在
Ingress
资源中定义
SSL/TLS
证书,从⽽提供
HTTPS
访问。
4.
⾼级路由
:
使⽤特定的
Ingress
控制器,可以定义更⾼级的路由规则,如重定向、重写、限速等。
总体来说,七层代理在
Kubernetes
中允许基于
HTTP/HTTPS
的属性进⾏复杂的路由决策,并且提供了⼀个统⼀的⽅式来管理外部访问到集群内的应用程序。
100.k8s部署⼀个wordpress需要哪些资源

101.⽤k8s部署java前后端分离程序,流程是什么
在
Kubernetes (k8s)
中部署
Java
前后端分离程序的流程可以分为⼏个主要步骤。以下是⼀个基础流程:
1.
容器化应⽤程序
:
后端
:
1.
为
Java
后端应⽤创建⼀个
Dockerfile
。
2.
在
Dockerfile
中设置基础镜像,例如
openjdk:11-jre-slim
。
3.
将编译后的
JAR
⽂件复制到容器中,并设置为容器启动时运⾏的命令。
前端
:
1.
为前端应⽤创建⼀个
Dockerfile
。
2.
使⽤合适的基础镜像,如
nginx:alpine
。
3.
构建前端应⽤(例如,使⽤
npm run build
),然后将构建产物复制到容器的
web
服
务器⽬录中。
2.
构建并推送容器镜像
:
使⽤
docker build
命令为每个应⽤构建镜像。
将这些镜像推送到容器镜像仓库,例如
Docker Hub
、
Google Container Registry
、
Harbor
等。
3.
编写
Kubernetes
清单
:
后端
:
1.
创建⼀个
Deployment
清单,定义如何运⾏
Java
后端应⽤。
2.
创建⼀个
Service
清单,使得其他
Pods
和外部系统可以访问后端应⽤。
前端
:
1.
创建⼀个
Deployment
清单,定义如何运⾏前端应⽤。
2.
创建⼀个
Service
清单,使得⽤户可以访问前端应⽤。
3.
可选地创建⼀个
Ingress
清单,定义如何路由外部流量到前端和后端应⽤。
4.
部署到
Kubernetes
:
使⽤
kubectl apply -f <manifest-file.yaml>
命令将之前创建的清单部署
到
Kubernetes
集群。
5.
设置持久化存储(如果需要的话)
:
如果你的
Java
后端应⽤需要数据库或其他持久化存储,你需要配置
PersistentVolumes
和
PersistentVolumeClaims
。
6.
设置配置和敏感数据
:
使⽤
ConfigMaps
和
Secrets
来管理应⽤的配置数据和敏感数据。
7.
监控和⽇志
:
设置监控⼯具,如
Prometheus
,来监控应⽤的性能和健康状况。
配置⽇志解决⽅案,如
Fluentd
、
Elasticsearch
和
Kibana
,来集中、存储和分析容器日志。
8.
持续部署
/
持续集成
(CI/CD)
:
根据需要,设置
CI/CD
流程,如
Jenkins
、
GitLab CI
、
ArgoCD
等,⾃动化应⽤的构建、测试和部
署过程。
这只是⼀个基础流程,根据实际需求,可能需要额外的配置、优化和管理步骤。
前1-80 网址在:
linux 100个问答(1-80)-CSDN博客
完结于202509081753
更多推荐



所有评论(0)