星驰编程网

免费编程资源分享平台_编程教程_代码示例_开发技术文章

佚名运维 k8s 训练营 - 第2天(k8s运维平台)

1. 什么是有状态服务,什么是无状态服务

无状态服务:服务处理每个请求时不依赖任何客户端的上下文状态,每个请求都是独立的,无需参考之前的请求信息。

有状态服务: 服务在处理请求时需要依赖客户端的上下文信息(状态数据),这些状态数据会在多次请求之间保持和共享。

2. 什么是冗余

冗余: 系统中设置多个相同功能的组件,当某个组件失效时,其他组件能够继续提供服务,确保系统的可用性和可靠性。

3. 在k8s中无状态服务的冗余如何实现

通过 Deployment 实现冗余

 vim django-blog.yaml #用一个博客网站举例
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: django-blog
   namespace: blog
 spec:
   replicas: 3
   selector:
     matchLabels:
       app: django
   template:
     metadata:
       labels:
         app: django
     spec:
       containers:
       - image: django-blog:v1
         name: web
         # 声明容器端口
         ports:
         - name: http
           containerPort: 8080
         resources:
           # 资源请求
           requests:
             memory: "128Mi"
             cpu: "250m"
           # 资源限制
           limits:
             memory: "512Mi"
             cpu: "500m"
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: django-blog
   namespace: blog
 spec:
   ports:
   - name: http
     port: 80
     protocol: Tcp
     targetPort: 8080
   selector:
     app: django
   type: NodePort

4. kubectl create中的--dry-run=client有什么作用,用于什么场景

--dry-run=client: 在客户端模拟资源创建过程,不实际提交到API Server,用于验证和生成YAML。

1. 生成YAML模板:

 kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > nginx-deployment.yaml

2. 验证资源定义:

 kubectl create -f nginx-deployment.yaml --dry-run=client

5. Deployment的主要功能是什么,解决了什么问题

Deployment的主要功能:

(1). 副本管理:确保指定数量的Pod副本在集群中运行。如果Pod副本数小于期望值,则会自动创建Pod;如果Pod副本数量小于期望值,则会自动创建Pod; 如果Pod副本数多于期望值,则删除多余的Pod。

(2). 滚动更新: 采用滚动更新策略,逐步进行新旧版本的Pod的替换,保障业务的连续性。

(3). 版本回滚: 如果应用程序在升级后出现问题或i不符合预期,可以执行回滚操作,以快速恢复到先前可用的版本。

解决的问题

解决了手动管理Pod的复杂性高、应用更新的风险、扩缩容困难的问题

6.Deployment其后端调用的那个服务

Deployment通过控制ReplicaSet来实现应用程序的部署和更新。ReplicaSet负责维护一组相同的Pod副本,以确保应用程序的可用性和可扩展性

 Deployment → ReplicaSet → Pod

7.什么是滚动更新,默认值是多少,如何设置

滚动更新: 逐步用新版本的Pod替换旧版本的Pod,确保服务在更新过程中持续可用。

默认值

 spec:
   strategy:
     type: RollingUpdate
     rollingUpdate:
       maxUnavailable: 25%    # 默认值:最多25%的Pod不可用
       maxSurge: 25%         # 默认值:最多超出25%的Pod

8. 如果使用Deployment启动了多个Pod,那么其他服务是否需要更换访问IP或域名?有什么更好的方法

Deploymen会管理多个Pod副本,每个Pod都有自己的IP,但这些IP是不稳定的,因为Pod可能会被重新调度或重启。所以直接访问Pod的IP显然不可行。

这时候就需要使用通过 Kubernetes 的 Service 机制实现的。Service 会为多个 Pod 提供一个统一的访问入口(虚拟 IP 或 DNS 名称),并自动将流量负载均衡到后端的 Pod。

9. 什么是Service,其主要功能是什么

Service是Kubernetes中的一种资源对象,用于定义一组Pod的网络访问规则,它为Pod提供了一个稳定的统一访问,允许客户端始终使用同一个IP地址进行访问,避免了直接使用Pod IP地址导致的不稳定性。

Service主要有以下两种功能。

(1). 负载均衡:当多个Pod提供服务时,Service通过负载均衡算法将请求分发到那些Pod上,从而实现应用程序的负载均衡.

(2). 服务发现: Service提供了一种服务发现机制,自动维护后端Pod IP的变化,从而保证客户端访问应用程序不受后端Pod变化的影响。

10. Service的底层使用的什么服务

service底层实现主要由两个网络模式组成:iptables与IPVS。他们都是有kube-proxy维护

11. Service有几种网络类型,区别是什么

类型

集群内访问

外部访问

云依赖

端口范围

ClusterIP

任意

NodePort

30000-32767

LoadBalancer

任意

ExternalName

N/A

12. endpoint是什么与service有什么关系

当创建一个Service时,kubernetes会根据service创建一个Endpoints对象,该对象负责维护与Service相关的后端Pod信息,并确保Service可以被正确地转发到后端Pod。

关系图

13. BusyBox在K8s中有什么作用

在日常的运维与开发工作中,我们时常需要一些轻量级工具来快速执行诊断命令、测试网络连接或验证服务状态。

而BusyBox作为轻量级Linux工具箱,包含常用的Unix工具,镜像体积小(约1-5MB),是Kubernetes中常用的调试和测试工具。

14.创建一个Deployment,启动多副本Nginx,并为其设置ClusterlP类型的Service,使用busybox访问此Service验证是否能够访问到所有Nginx副本

 cat nginx-deployment.yaml 
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: nginx
   labels:
     app: nginx
 spec:
   replicas: 3
   selector:
     matchLabels:
       app: nginx
   template:
     metadata:
       labels:
         app: nginx
     spec:
       containers:
       - image: nginx:latest
         name: nginx
         ports:
         - containerPort: 80
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: nginx-service
 spec:
   type: ClusterIP
   selector:
     app: nginx
   ports:
   - port: 80
     targetPort: 80
 

进入 busybox

 kubectl run busybox --image=busybox --restart=Never --rm -it -- sh
 / # wget -q -O- http://nginx-service
 <!DOCTYPE html>
 <html>
 <head>
 <title>Welcome to nginx!</title>
 <style>
 html { color-scheme: light dark; }
 body { width: 35em; margin: 0 auto;
 font-family: Tahoma, Verdana, Arial, sans-serif; }
 </style>
 </head>
 <body>
 <h1>Welcome to nginx!</h1>
 <p>If you see this page, the nginx web server is successfully installed and
 working. Further configuration is required.</p>
 
 <p>For online documentation and support please refer to
 <a href="http://nginx.org/">nginx.org</a>.<br/>
 Commercial support is available at
 <a href="http://nginx.com/">nginx.com</a>.</p>
 
 <p><em>Thank you for using nginx.</em></p>
 </body>
 </html>
 ## 访问成功

15.设置kubectl别名为k,并配置命令自动补全

 #配置命令
 echo 'alias k=kubectl' >> ~/.bashrc
 source ~/.bashrc
 

配置命令补全

 sudo apt install bash-completion
 # 先加载 bash-completion
 echo 'source /usr/share/bash-completion/bash_completion' >> ~/.bashrc
 
 # 再添加 kubectl 补全
 echo 'source <(kubectl completion bash)' >> ~/.bashrc
 echo 'complete -F __start_kubectl k' >> ~/.bashrc
 
 # 重新加载
 source ~/.bashrc
 
 #这样就可以
 kubectl get po<TAB>#自动补齐d



控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言