云原生|kubernetes|CKA真题解析-------(6-10题)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 云原生|kubernetes|CKA真题解析-------(6-10题)

第六题:

service配置

解析:

考察两个知识点:

deployment控制器内的port命名

暴露一个pod内的端口到新建的服务内的

这里有一个需要注意的地方,没有告诉你deployment控制器在哪个namespace。假设这个front-end这个pod是在A这个namespace内,那么,service创建的时候也必须是在A这个namespace里,否则,service无法正常工作。

这也算是这道题目的一个小陷阱。

解题:

1,查询deployment

root@k8s-master:~# kubectl get deployments.apps -A
NAMESPACE      NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
default        front-end                 1/1     1            1           359d
default        guestbook                 6/6     6            6           359d
default        nfs-client-provisioner    1/1     1            1           359d

2,编辑front-end,给端口命名为http,修改的内容是这些,修改完毕后保存退出:

       ports:
        - containerPort: 80
          name: http
          protocol: TCP

3,新增type为NodePort的service:

这里的target-port要引用上面创建的端口,名称为http

root@k8s-master:~# kubectl expose deployment front-end --type=NodePort --target-port=http --port=80 --dry-run=client -oyaml >6.yaml

修改6.yaml文件,将service名字修改成符合题目要求的名字

4,测试

查看新建的service

root@k8s-master:~# kubectl get svc 
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
front-end-svc   NodePort    10.97.221.101   <none>        80:32678/TCP   5s
kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP        375d

curl 这个service 节点IP+332678,如果出现200,表示service正常:

root@k8s-master:~# curl -i 192.168.123.150:32678
HTTP/1.1 200 OK
Server: nginx/1.21.5
Date: Sun, 18 Dec 2022 09:33:59 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 28 Dec 2021 15:28:38 GMT
Connection: keep-alive
ETag: "61cb2d26-267"
Accept-Ranges: bytes

第七题:

解析:

这道题有两种解法,第一种是在官网找示例修改,第二种是命令行方式直接创建ingress,只是需要注意最后要测试创建的ingress是否正确。

第一种方式:

在官网找ingress的示例,官网地址如下:

Ingress | Kubernetes

第一个示例就可以符合题意:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

修改成如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ping
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: /hello
        backend:
          service:
            name: hello
            port:
              number: 5678

测试:

查看ingress代理的service结果是什么:

root@k8s-master:~# kubectl get svc -A
NAMESPACE       NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
default         front-end-svc                        NodePort    10.97.221.101    <none>        80:32678/TCP                 92m
default         kubernetes                           ClusterIP   10.96.0.1        <none>        443/TCP                      375d
ing-internal    hello                                ClusterIP   10.106.182.229   <none>        5678/TCP                     360d
root@k8s-master:~# curl 10.106.182.229:5678
hello

查看ingress代理的结果,如果输出都一样,表明ingress是正确的:

root@k8s-master:~# kubectl get ing -A
NAMESPACE      NAME   CLASS   HOSTS   ADDRESS                                           PORTS   AGE
ing-internal   ping   nginx   *       192.168.123.150,192.168.123.151,192.168.123.152   80      3d20h
root@k8s-master:~# curl 192.168.123.150/hello
hello

第二种方式----命令行直接生成:

生成模板文件

ping是ingress的名字,hello:5678 是service的名称和端口

kubectl create ingress -n ing-internal ping --rule=/hello=hello:5678 --annotation=nginx.ingress.kubernetes.io/rewrite-target=/ --dry-run=client -oyaml >7.yaml

查看模板文件:

root@k8s-master:~# cat 7.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  creationTimestamp: null
  name: ping
  namespace: ing-internal
spec:
  rules:
  - http:
      paths:
      - backend:
          service:
            name: hello
            port:
              number: 5678
        path: /hello
        pathType: Exact
status:
  loadBalancer: {}

应用模板文件并进行测试:

kubectl apply -f 7.yaml

需要等待一段时间,直到查询出的ingress绑定有节点的IP后:

root@k8s-master:~# kubectl get ing -A
NAMESPACE      NAME   CLASS    HOSTS   ADDRESS                                           PORTS   AGE
ing-internal   ping   <none>   *       192.168.123.150,192.168.123.151,192.168.123.152   80      104s

最终测试:

root@k8s-master:~# curl 192.168.123.150/hello
hello

第八题:

解析:这个题确实是送分题,没什么好说的。照做即可。

第九题:

解析:

这个题也是送分题,两步即可完成。

·1,查看节点的标签 是否有disk=ssd,没有则挑选一个节点打上这个标签

root@k8s-master:~# kubectl get no --show-labels 
NAME         STATUS   ROLES                  AGE     VERSION    LABELS
k8s-master   Ready    control-plane,master   375d    v1.22.10   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node1    Ready    <none>                 5d20h   v1.22.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
k8s-node2    Ready    <none>                 5d20h   v1.22.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux

节点没有这个标签,因此,随便选择一个节点,本例选择node2节点,打disk=ssd这个标签

root@k8s-master:~# kubectl label no k8s-node2 disk=ssd
node/k8s-node2 labeled

     确认标签是否正确:

root@k8s-master:~# kubectl get no --show-labels  |grep ssd
k8s-node2    Ready    <none>                 5d20h   v1.22.2    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux

2,按照题意生成模板文件,给模板文件添加nodeSelector

生成模板文件:

kubectl run nginx-kusc0041 --image=nginx --dry-run=client -oyaml >9.yaml

编辑模板文件,最后结果如下:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx-kusc0041
  name: nginx-kusc0041
spec:
  containers:
  - image: nginx
    name: nginx-kusc0041
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
  nodeSelector:
    disk: ssd
status: {}

执行模板文件并验证是否正确调度到了k8s-node2节点:

root@k8s-master:~# kubectl apply -f 9.yaml 
pod/nginx-kusc0041 created
root@k8s-master:~# kubectl get po nginx-kusc0041  -owide
NAME             READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
nginx-kusc0041   1/1     Running   0          2m39s   10.244.169.149   k8s-node2   <none>           <none>

第十题:

这个题也是送分题,没什么好说的,直接就看出来的:

root@k8s-master:~# kubectl describe nodes  |grep -i Taint |grep -iv NoScheduole
Taints:             node-role.kubernetes.io/master:NoSchedule
Taints:             <none>
Taints:             <none>
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
17天前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
8天前
|
存储 人工智能 Cloud Native
NAS深度解析:面向云原生应用的文件存储
本文深入解析了面向云原生应用的文件存储NAS,由阿里云专家分享。内容涵盖Cloud Native与AI浪潮下的技术创新,包括高性能、弹性伸缩、成本优化及数据安全等方面。针对云原生应用的特点,NAS在Serverless生态中不断演进,提供多种产品规格以满足不同需求,如极速型NAS、归档存储等,确保用户在高并发场景下获得稳定低延时的存储体验。同时,通过优化挂载参数和容器访问策略,提升整体性能与可用性。
31 11
|
1月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
152 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
2月前
|
Kubernetes 监控 API
深入解析Kubernetes及其在生产环境中的最佳实践
深入解析Kubernetes及其在生产环境中的最佳实践
96 1
|
2月前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
117 2
|
1月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析