首页 > 其他分享 >CNCF Alibaba 云原生技术底层知识点以及核心概念

CNCF Alibaba 云原生技术底层知识点以及核心概念

时间:2023-06-12 14:36:14浏览次数:49  
标签:CNCF 知识点 run Kubernetes 容器 -- demo Alibaba docker

1、入门:

1.Kubernetes 并不支持为应用固定 IP,于是我自己通过编写网络插件把应用 IP 管理在了 etcd 里,然后上线。请问这破坏了云原生的理念了吗?A
A. 否
B. 是
2.云原生技术与容器技术的关系是? B
A. 完全相同
B. 容器技术是云原生的基础技术之一
C. 没有关系
3.容器启动后,我会时常 SSH 进入到容器里然后写很多文件。请问这破坏了云原生理念了吗? B
A. 否
B. 是
4.如果我想学习一键部署 Kubernetes 集群,应该关注本课程大纲里的哪个知识点? B
A. Kubernetes 基础
B. 集群安装配置与验证
C. Kubernetes 进阶
D. 应用配置管理
5.云原生架构必须只使用 CNCF 里的项目。 A
A. 否
B. 是
6.我编写的容器化应用,会将日志文件写在某路径写死的目录里。请问这破坏了云原生理念了吗? B
A. 否
B. 是
7.以下哪些项目跟 Kubernetes 项目功能重合度最高? C
A. Mesos
B. Docker Swarm
C. Docker Swarm 模式(SwarmKit)
D. Cloud Foundry
8.以下哪些能力不是标准 Kubernetes 项目提供的? B
A. 容器编排与调度
B. PaaS
C. 资源管理
D. 服务注册与发现
9.云原生架构必须选型 Kubernetes 方案。 A
A. 否
B. 是
10.以下哪些标准,可以用来考察一个应用的架构是不是云原生的? ABC
A. 应用实例能否快速水平扩展
B. 应用是否使用镜像机制打包来保证环境一致性
C. 应用数据是否都写在容器数据卷中
D. 应用是否有状态

2、容器基本概念

1.已运行 docker run -d -t —name demo ubuntu top 命令,以下哪个 docker 命令创建出的容器能看见 demo 容器进程? B
A. docker run --name demo-x --net container:demo ubuntu ps
B. docker run --name demo-x --pid container:demo ubuntu ps
C. docker run --name demo-x --ipc container:demo ubuntu ps
2.以下哪个 docker 命令可以用来创建一个使用宿主机主机名的容器? A
A. docker run --uts=host ubuntu hostname
B. docker run ubuntu hostname
C. docker run --ipc host ubuntu ps
3.已运行 docker run -d -t —name demo ubuntu top 和 docker run --name demo-x --pid container:demo ubuntu ps 命令,如果 demo 容器退出了,正在运行的 demo-x 容器是否会退出? A
A. 是
B. 否
4.已运行 docker run -d —name demo busybox:1.25 top 命令,如何使用 docker 命令来获取容器 demo 的 Init 进程 PID? A
A. docker inspect demo -f '{{.State.Pid}}'
B. docker inspect demo -f '{{.Pid}}'
5.已运行 docker run -d -t —name demo ubuntu top 命令, 在 demo 这个容器内看到 top 命令的 PID 是什么? B
A. 随机数字
B. 1
6.已知容器 Init 进程 PID,在宿主机上通过 kill -9 PID 的方式结束该进程,容器当前的状态是什么? A
A. Exited
B. Stopped
7.已运行 docker run -d -t —name demo ubuntu top 命令, docker exec -it demo kill -9 1 强行给容器内一号进程发KILL信号,容器是否会退出? B
A. 是
B. 否
8.已运行 docker run -d -t —name demo ubuntu top 和 docker run --name demo-x --pid container:demo ubuntu ps 命令,是否可以在 demo-x 容器内部停止容器? A
A. 是
B. 否
9.以下哪个 docker 命令创建出来的容器可以自动重启? C
A. docker run -d busybox top
B. docker run --restart always busybox top
C. docker run -d --restart always busybox top
10.如何快速判断 docker daemon 是否支持动态接管运行容器? AB
A. docker info | grep 'Live Restore Enabled'
B. docker info -f '{{.LiveRestoreEnabled}}'
C. docker info -f "{{.Live_Restore_Enabled}}"

注: 在国内访问 Docker Hub 速度比较慢,可以在Docker引擎中设置镜像加速器加速对Docker Hub的访问。 更新 /etc/docker/daemon.json,添加如下参数,并重启Docker引擎。

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

阿里云注册链接:https://account.aliyun.com/register/register.htm

阿里云登录链接:https://account.aliyun.com/login/login.htm

阿里云容器镜像服务页面:https://cr.console.aliyun.com

容器镜像服务(Container Registry)提供安全的应用镜像托管能力,精确的镜像安全扫描功能,稳定的国内外镜像构建服务,便捷的镜像授权功能,方便用户进行镜像全生命周期管理。 1、当我们拥有阿里云容器镜像服务账号,并在访问凭证页面设置固定密码后,就可以使用 docker 客户端来登录服务。回到ECS实例,执行以下命令:

$ docker login  -username=**** registry.cn-hangzhou.aliyuncs.com
Password:
Login Succeeded

注意:此处的密码是在容器镜像服务-访问凭证页面 设置的固定密码。

2、在推送到镜像之前,我们在容器镜像服务的杭州地域,建立一个命名空间为mydemo、仓库名为demo的本地仓库。之后,我们在ECS上将镜像地址修改为对应的镜像仓库地址:

# mydemo 可以替换成自己的命名空间
$ docker tag demo:v1 registry.cn-hangzhou.aliyuncs.com/mydemo/demo:v1

$ docker push registry.cn-hangzhou.aliyuncs.com/mydemo/demo:v1

3、在本地下载demo:v1镜像

登出 ECS 实例,在本地(已安装docker环境) docker pull 来下载镜像。

# mydemo 请替换成第5小节步骤中指定的命令空间
$ docker pull registry.cn-hangzhou.aliyuncs.com/mydemo/demo:v1

下载完毕之后,我们就可以直接运行该镜像。

$ docker run -d -p 8000:80 registry.cn-hangzhou.aliyuncs.com/mydemo/demo:v1

并查看本地的 8000 端口。

$ curl localhost:8000

扩容到2个POD

[root@cce-7day-fudonghai-24106 01CNL]# kubectl scale deployment nginx --replicas=2
deployment.extensions/nginx scaled

扩容成功

[root@cce-7day-fudonghai-24106 01CNL]# kubectl get deploy/nginx -owide
NAME     READY     UP-TO-DATE   AVAILABLE   AGE       CONTAINERS   IMAGES   SELECTOR
nginx     2/2       2           2           14m       nginx       nginx     run=nginx

使用run命令建立yaml文件,而不是真正建立对象

[root@cce-7day-fudonghai-24106 ~]# kubectl run --image=nginx my-deploy -o yaml --dry-run > my-deploy.yaml

可以使用下列命令启动自动补全功能

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

如果报错,升级一下bash-completion软件

yum install bash-completion

查看资源定义

[root@cce-7day-fudonghai-24106 027day]# kubectl explain pod.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution

查看集群状态

[root@master1 ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.57.130:6443
KubeDNS is running at https://192.168.57.130:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@master1 ~]#

改变资源升级

[root@cce-7day-fudonghai-24106 027day]# kubectl set resources deploy nginx -c=nginx --limits=cpu=200m,memory=256Mi
deployment.extensions/nginx resource requirements updated
[root@cce-7day-fudonghai-24106 027day]# kubectl get pod
NAME                     READY     STATUS   RESTARTS   AGE
nginx-6bc5c66cdd-dqwdm   1/1       Running   0         14s
nginx-6bc5c66cdd-xz85d   1/1       Running   0         14s
[root@cce-7day-fudonghai-24106 027day]# kubectl get pod
NAME                     READY     STATUS   RESTARTS   AGE
nginx-6bc5c66cdd-dqwdm   1/1       Running   0         19s
nginx-6bc5c66cdd-xz85d   1/1       Running   0         19s
[root@cce-7day-fudonghai-24106 027day]# kubectl rollout history deploy nginx --revision=3
deployments "nginx" with revision #3
Pod Template:
Labels:   pod-template-hash=6bc5c66cdd
  run=nginx
Containers:
  nginx:
  Image:   nginx:1.9.1
  Port:   <none>
  Host Port:   <none>
  Limits:
    cpu:   200m
    memory:   256Mi
  Environment:   <none>
  Mounts:   <none>
Volumes:   <none>

回滚到版本2

[root@cce-7day-fudonghai-24106 027day]# kubectl  rollout undo deploy nginx --to-revision=2
deployment.extensions/nginx

水平扩容

[root@cce-7day-fudonghai-24106 027day]# kubectl scale deploy nginx --replicas=4
deployment.extensions/nginx scaled
[root@cce-7day-fudonghai-24106 027day]# kubectl get pod
NAME                     READY     STATUS             RESTARTS   AGE
nginx-8676fdbb6d-2g4np   1/1       Running             0         3m39s
nginx-8676fdbb6d-c9k78   0/1       ContainerCreating   0         7s
nginx-8676fdbb6d-rj4np   1/1       Running             0         3m39s
nginx-8676fdbb6d-vjtln   0/1       ContainerCreating   0         7s
[root@cce-7day-fudonghai-24106 027day]# kubectl get pod
NAME                     READY     STATUS             RESTARTS   AGE
nginx-8676fdbb6d-2g4np   1/1       Running             0         3m45s
nginx-8676fdbb6d-c9k78   0/1       ContainerCreating   0         13s
nginx-8676fdbb6d-rj4np   1/1       Running             0         3m45s
nginx-8676fdbb6d-vjtln   1/1       Running             0         13s

[root@cce-7day-fudonghai-24106 027day]# kubectl rollout history deploy nginx
deployments "nginx"
REVISION CHANGE-CAUSE
1         <none>
3         <none>
4         <none>

3、核心概念

master核心组件

1、API server 所有组件和这里连接进行消息传送
2、Controller 控制器,集群状态管理,容器修复,水平扩张 热备
3、Scheduler 调度器,找合适的节点放置 热备
4、etcd 存储,高可用系统,保证master组件的系统

node核心组件

1、Kubelet 关键组件,通过apiserver获取状态,创建环境运行容器
2、Container Runtime 拿到指令进行部署
3、Storage Plugin 存储
4、Network Plugin 网络
5、Kube-proxy

例子:生命周期

Kubernetes Watch 机制可以看作是基于 SSE 的实时事件推送机制。它提供了一种高效、即时、实时的方式来监控和响应 Kubernetes 资源的变化
HTTP 长连接和 Server-Sent Events(SSE)来实现的

完整生命周期:

用户可以通过 UI、CLI提交一个pod给kubernetes进行部署,这个pod的请求首先会通过UI、CLI提交一个pod给kubernetes进行部署,那这个pod的请求首先会通过UI、CLI提交给kubernetes API Server,下一步,API server会把信息写入到存储系统etcd里面,之后Scheduler会通过API Server的watch或实时事件推送机制得到这个信息,有一个pod需要被调度,这时候Scheduler会根据他的内存状态进行一次调度决策,在完成调度之后,他会像API Server report说;OK这个pod需要被调度到某一个节点上,这时候API Server接收到这次操作之后,会把这个结果写入到etcd中,然后API Server通知对应的节点进行这次pod的真正的执行、启动,相应节点的kubectl会得到通知,kubectl会调用Container Runtime来真正启动配置容器和容器运行环境,去调度这个Storage Plugin配合存储,Network Plugin配置网络

Deployment

应用控制单元

Service

网络 支持多种访问 ClusterIP NodePort LoadBalancer

Namespaces

一个集群内部的逻辑隔离机制(鉴权、资源额度)

API基础知识

APIVersion: 路径二级目录 /api/v1

Kind: 定义,比如pod 操作那种资源

Metadata:写pod名字 打标签labels 写资源额外用户层的描述

Spec:希望pod达到预期状态,内部哪些containers需要被运行,所需要的image是什么,所暴露的端口是什么,当我们从API中获取,一般会有一个states,状态调度、running或terminalt(被执行完毕)

练习

1.Kubelet 或者 Scheduler 是否会和 etcd 直接通讯? B
A. 是
B. 否
2.如果想要改变 Deployment 中的 Pod 副本数,需要________  B
A. 通过 API 调用,通知 Kubernetes 需要在Deployment中增加的 Pod 副本具体数目
B. 通过 API 调用,通知 Kubernetes 需要 Deployment到达到的 Pod 副本最终数目
C. 通过 API 调用,生成新的 Pod 副本,并且把新的 Pod 副本赋予 Deployment
D. 无法改变 Deployment的Pod副本数,只能重新生成一个新的 Deployment
3.Kubernetes 的中文含义是________  B
A. 船
B. 舵手
C. 容器平台
D. 起重机
4.API Server 的主要功能是________  A
A. 暴露 Kubernetes API,Kubernetes 控制面的前端,也是内部组件互相通讯的中枢
B. 暴露 Kubernetes API,Kubernetes 控制面的前端,但是内部组件会直接通讯而不经过 API Server
C. 暴露 Kubernetes API,持久化存储 Kubernetes 的 API object
D. 管理 Kubernetes 的 API object 的在集群中的生命周期
5.Scheduler 的主要功能是________  A
A. Pod 的在Node上的放置
B. Pod 的生命周期管理
C. Node 上具体的资源分配
D. Node 的生命周期管理
6.Kubectl 是________  A
A. 一个与 Kubernetes 集群进行交互、管理的命令行工具
B. 一个与 Kubernetes 集群进行交互、管理的Web UI 界面
C. 一个 用来管理 Deployment 等作业负载的 Kubernetes 控制器
D. 一个对 Kubernetes 节点进行监控的服务
7.Kubernetes 进行资源调度的最小粒度是________  C
A. 进程
B. 容器
C. Pod
D. 虚拟机
8.Kubernetes 的主要功能不包括________    EF
A. Service discovery and load balancing
B. Automatic bin packing
C. Storage orchestration
D. Self-healing
E. Continuous integration
F. Canary Analysis
G. Automated rollouts and rollbacks
H. Secret and configuration management
I. Horizontal scaling
J. Batch execution
9.属于 Node 上的基本组件有________  ABD
A. Kubelet
B. Kube-proxy
C. Controller Manager
D. Container runtime engine
10.Kubernetes 的 API Object通常包含那几部分? ABCDE
A. apiVersion
B. kind
C. metadata
D. spec
E. status

4、pod和容器设计模式

1.容器的“单进程”模型的具体含义是?  B
A. 容器里只能运行一个进程
B. 容器里PID=1 的进程是应用本身,一般情况下不具备像 systemd 这样完善的进程管理能力
C. 容器不支持多进程的编程模型
D. 我不能 exec 进入容器然后启动一个新进程
2.如果:Kubernetes 比作操作系统,容器比作进程,那么:Pod 可以比作进程组  B
A. 否
B. 是
3.容器的PID=1 的进程是应用本身 B
A. 否
B. 是
4.如果容器 A 要获取容器 B 里的某个文件,我该怎么做?  B
A. A 进入 B 的 Mount Namespace
B. A、B 放在一个 Pod 里通过共享 Volume 来传递文件
C. A 和 B 共享 Mount Namespace
D. 把需要的文件打进 A 的镜像
5.一个 Pod 里Infra Container 的启动顺序是?  D
A. 无所谓
B. 最后一个
C. 先于主业务容器启动即可
D. 第一个
6.关于 Pod 的描述不正确的是  A
A. 一个 Pod 里一个容器是最佳实践
B. 一个逻辑概念
C. 多个容器的组合
D. Kubernetes 的原子调度单位
7.Istio 项目会往用户的 Pod 里注入 Envoy 容器,用来代理 Pod 的进出流量,这是什么设计模式? B
A. 装饰器
B. sidecar
C. 工厂模式
D. 单例
8.关于 Google Borg 论文论述正确的是?  BCD
A. 应用互相之间往往相互独立,毫不相关
B. 应用互相之间往往存在协作关系
C. 很多应用需要部署永远部署在同一台机器上
D. Google 在进行应用开发的过程中,天生就具备微服务的概念
9.如果没有 Pod 概念,但我要用多个容器模拟 Pod 的话,可能需要做哪些工作?  ABCD
A. resource hoarding
B. 乐观调度
C. 共享这些容器的Network Namespace
D. 设置 Affinity 约束
10.两个容器之间的超亲密关系可能包括哪些情况?  BD
A. 需要运行在同一台宿主机上
B. 直接发生文件交换
C. 低频率的 RPC 调用
D. 共享某些 Linux Namespace
 

 

 

 

 

标签:CNCF,知识点,run,Kubernetes,容器,--,demo,Alibaba,docker
From: https://www.cnblogs.com/security-guard/p/kubernetesmd.html

相关文章

  • 【React工作记录一百】前端小知识点扫盲笔记记录5
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结事件委托<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/> <metahttp-equiv="X-UA-Compatible"content="IE=edge"/&g......
  • Linux知识点 – 随缘更新
    Linux基础篇1.桥接模式:虚拟系统可以和外部系统相互通讯,但是容易造成ip冲突,只能使用与物理机同一个网段2.nat模式:NAT模式与外界通话需要经过物理机(的NAT转换),不会多占一个局域网IP,可以与外部系统相互通讯,不会造成ip冲突,但是外部设备也无法访问虚拟设备3.主机模式:不和外部通讯4......
  • 【八股cover#2】CPP语法 Q&A与知识点
    CPP语法Q&A与知识点简历cover1、熟练使用C的指针应用及内存管理指针与引用的区别指针是一个存储地址的变量,可以有多级,可以为空,并且在初始化后可以改变指向;引用是原变量的别名,只有一级,不能为NULL,必须在定义时初始化,并且一旦初始化后就不能再改变。指针在作为参数传递时不会......
  • Maven知识点
    一、常用标签及属性1.maven 依赖属性:groupId、artifactId、versiongroupId、artifactId、version,当使用该插件时会从本地仓库中搜索,如果没有即从远程仓库下载2.插件执行: execution,id,phase,goals,configurationexecution配置包含一组指示插件如何执......
  • Caused by: java.lang.ClassNotFoundException: com.alibaba.fastjson2.util.Wrap
    1.情景展示使用fastjson2,运行时报错:Causedby:java.lang.ClassNotFoundException:com.alibaba.fastjson2.util.Wrap2.具体分析出现这个问题,是因为pom.xml当中引用的有关fastjson的jar包冲突造成的。只要我们把冲突的jar包排除掉就可以了。3.解决方案在idea当中,使用插件......
  • 【React工作记录九十五】前端小知识点扫盲笔记记录4
    前言我是歌谣最好的种树是十年前其次是现在微信公众号关注前端小歌谣带你进入氛围极好的前端巅峰人才交流群url参数解析成一个对象<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • 【八股cover#1】MySQL Q&A与知识点
    MySQLQ&A与知识点1、基础知识什么是主键?它用来唯一标识一条记录(一个字段)。每个表都必须有且只能有一个主键,主键的取值不允许为空,而且在表中必须是唯一的(当然还可以有复合主键)。什么是索引?在MySQL中,索引是一种数据结构,用于加速数据库表中的数据检索。它可以看作是一个快速查......
  • Python爬虫基础知识点
    Python爬虫是使用Python编写的程序,可以自动抓取互联网上的数据。常用的Python爬虫框架包括Scrapy、BeautifulSoup、Requests等。Python爬虫可以应用于众多场合,如大数据分析、信息监测、数据挖掘和机器学习等领域。那么新手应该如何学习python爬虫呢?以下是Python爬虫的基础知识:1......
  • 用Spring Cloud Alibaba构建用户中心!只要5分钟
    你好,我是田哥。前几天,有几位朋友私信我,叫我写一个使用SpringCloudAlibaba搭建项目。今天,我给安排上,使用SpringCloudAlibaba搭建一个用户中心。下面,我就来给大家说一下,我饿还是如何搭建的,具体步骤如下:使用IDEA创建项目结构添加maven相关依赖安装Nacos业务代码整个技术栈:Spring......
  • SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
    前言这篇博客主要记录的是谷粒商城项目的完整开发过程大家想看的话也可以去这里看看:笔记地址传送门后续还会继续维护这个笔记一、项目架构二、技术总和三、开发准备1、开发环境搭建2、工程初始化四、分布式基础篇(全栈开发篇)五、分布式高级篇(微服务架构篇)......