k8s 分成Master 负责整个k8s集群管理 node节点(工作)运行nginx
节点—服务器
kubernetes 组件
kubernetes集群主要由控制节点(Master)、工作节点(Node)构成
Master组件
集群的控制平面,集群的决策 负责管理k8s 集群管理
apiserver
Kubernetes API:集群统一入口,各个组件的和谐者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给apiserver处理后再提交etcd存储
控制集群入口
scheduler
负责资源调理,按照预定的调理策略将Pod调理到相应Node上
比方 集群运行一个nginx容器,通过scheduler 根据调理策略计算 nginx 安装到那台对应的工作节点上(计算);
controller-manager
处理集群中通例的后台任务,一个资源对应一个控制器,而controller-manager就是负责管理这些控制器的
维护集群的状态。比如故障检测、自动扩展、滚动更新等
比方 集群运行一个nginx容器,通过scheduler 根据调理策略计算 nginx 安装到那台对应的工作节点上(计算),在 通过controller-manager 安排 将nginx安装到对应的工作节点上(安排)。
etcd
分布式键值存储系统。用于生存集群状态数据,比如Pod。Service等对象信息
我们可以将etcd 改成mysql。
node组件
集群的数据平面,负责为容器提供运行情况(工作节点)
kubelet
kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期。比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器
kubelet 发送死令给docker 来运行容器
kube-proxy
在Node节点或实现Pod网络署理,维护网络规则和四层负载均衡工作
访问程序的入口
docker
运行nginx 计算
访问nginx
容器引擎:运行容器
比方通过k8s运行一个nginx:
1.首先发送请求到Master节点(控制节点) ApiServer组件
2.ApiServer组件会根据scheduler组件计算出 nginx 应该安装到具体那台工作节点上
3.ApiServer组件在调用controller-manager组件,通知node节点安装该nginx服务
4.Node节点中的kubelet继承到控制节点的通知,使用docker运行一个nginx容器(nginx pod)
pod是k8s最小操作单位 一个pod可以运行多个容器
5.nginx运行乐成之后,在通过kube-proxy 来对我们的pod进行访问。
kubectl create deployment nginx --image=nginx:1.14-alpine
常见名词
1.Master:集群控制节点,每个集群需要至少一个master节 点负责集群的管控
2.Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
3.Pod: kubernetes的最小控制单位,容器都是运行在pod中的,-个pod中可以有1个大概多个容器
4.Controller:控制器,通过它来实现对pod的管理,比如启动pod、 制止pod、伸缩pod的数量等等
5.Service: pod对外服务的统一入口,下面可以维护者同一类的多个pod
6.Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
7.NameSpace:定名空间,用来隔离pod的运行情况
kubernetes资源管理/清单设置基础
kubectl常用的下令
kubectl的下令可分为三类
1.陈述式下令(下令式对象管理) 类似于我们直接在docker 中 docker run 下令
2.陈述式对象设置(下令式对象设置) 类似于类似于 docker-compose.yml
3.声明式对象设置(声明式对象设置)
kubectl是k8s集群的下令行工具,通过它可以大概对集群自己进行管理,并可以大概在集群上进行容器化应用的安装摆设,kubectl下令的语法如下:
- kubectl [command] [type] [name] [flags]
- comand:指定要对资源执行的操作,例如create、 get、delete
- type:指定资源类型,比如deployment、pod、 service
- name:指定资源的名称,名称大小写敏感
- flags:指定额外的可选参数
复制代码 kubectl get nodes 查询当节点
kubectl 常用下令
1.kubectl get nodes —查询k8s集群节点
2.kubectl get pod —查看所有的pod
3.kubectl describe pod nginx-6867cdf567-94kcb
查看pod详细内容
然后在我们的工作节点上执行 docker ps 查看该nginx 是否在运行
4.kubectl cluster-info —查看k8s 集群的信息
5.kubectl version 查看当前k8s 集群的版本
陈述式下令(下令式对象管理)
通过陈述式下令(下令式对象管理) 对namespace/pod操作
pod 是我们k8s 最小单位 容器运行在我们的pod里面,说到pod就是pod是放容器的
一个pod可以在里面运行n多个不同容器
1.下令情势创建一个namespace
kubectl create namespace mayikt-sit
2.查询所有的namespace
kubectl get ns
3.在mayikt-sit的namespace 下运行一个pod
kubectl run pod --image=nginx -n mayikt-sit
4.查看mayikt-sit下的pod
kubectl get pods -n mayikt-sit
留意事项 查询pod 需要指定具体定名空间
kubectl get pods -n
默认查询 default namespace
5.查看该pod的详细信息
kubectl describe pod pod-864f9875b9-h467q (错误方式)
需要指定该pod对应的namespace 如果没有指定则会报错
kubectl describe pod pod-864f9875b9-h467q -n mayikt-sit (正确方式)
6.删除该pod
不能只删pod,由于pod不存在了,会自动起一个pod
kubectl delete pods pod-864f9875b9-whqt6 -n mayikt-sit
但是删除该pod之后,有重新启动一个新的pod
kubectl get pods -n mayikt-sit
对比发现pod name 名称已经发生变化,让后查看该新的pod详细信息
kubectl describe pod pod-864f9875b9-jdp7k -n mayikt-sit
你会发现ip 也发生了变化。
我们应该通过删除定名空间,则自动会将这些pod删除
kubectl delete ns mayikt-sit
查看该定名空间下pod 已经没有该pod呢
方式2 下令式对象设置
下令式对象设置就是使用下令配合设置文件一起来操作k8s资源 类似于我们学习的
docker-compose 界说 yml 设置文件 需要对yaml 设置有肯定了解。
kubectl create -f mayikt-pod1.yml 创建资源
kubectl delete -f mayikt-pod1.yml 删除资源
kubectl get-f mayikt-pod1.yml
1.创建 mayikt-pod1.yml
- apiVersion: v1
- kind: Namespace
- metadata:
- name: mayikt-sit #指定的Namespace空间名称
- ---
- apiVersion: v1
- kind: Pod
- metadata:
- name: mayikt-nginx-pod #指定pod的名称,同一个命名空间不能重复
- namespace: mayikt-sit #指定该pod对应的Namespace
- spec:
- containers:
- - name: mayikt-nginx-container #运行一个nginx容器
- image: nginx:1.17.9 #指定镜像的名称
-
复制代码 上面yml的效果
上传到服务器端
/usr/local 创建一个 mayikt 来演示我们的
mkdir mayikt
执行kubectl create -f mayikt-pod1.yml
创建乐成 自动创建Namespace mayikt-sit 和 pod mayikt-nginx-pod
执行 kubectl get ns
执行 kubectl get pods -n mayikt-sit
查看该pod详细信息 kubectl describe pod mayikt-nginx-pod -n mayikt-sit
该容器运行在 164节点 执行curl 172.17.0.2 阐明 pod中容器运行乐成
执行get下令,查看资源 kubectl get -f mayikt-pod1.yml
删除delete 下令 kubectl delete -f mayikt-pod1.yml
namespace “mayikt-sit” deleted
pod “mayikt-nginx-pod” deleted
执行 kubectl get ns
在访问该nginx 已经访问不了
声明式对象设置
声明式对象设置跟下令式对象设置很类似,通过下令apply
kubectl apply -f mayikt-pod2.yml
在创建一个mayikt-pod2.yml
- apiVersion: v1
- kind: Namespace
- metadata:
- name: mayikt-sit #指定的Namespace空间名称
- ---
- apiVersion: v1
- kind: Pod
- metadata:
- name: mayikt-nginx-pod #指定pod的名称
- namespace: mayikt-sit #指定该pod对应的Namespace
- spec:
- containers:
- - name: mayikt-nginx-container #运行一个nginx容器
- image: nginx:1.17.9 #指定镜像的名称
复制代码 执行:kubectl apply -f mayikt-pod2.yml
查看 pod kubectl get pods -n mayikt-sit
查看pod 详细信息
kubectl describe pod mayikt-nginx-pod -n mayikt-sit
再次执行 kubectl apply -f mayikt-pod2.yml 资源没有发生任何变化
namespace/mayikt-sit unchanged
pod/mayikt-nginx-pod unchanged
未发生变化
修改nginx的版本1.17.8
再次执行:kubectl apply -f mayikt-pod2.yml
pod 是有发生变化的
查看pod 详细信息
kubectl describe pod mayikt-nginx-pod -n mayikt-sit
nginx:1.17.9 改成nginx:1.17.8
总结:
如果资源不存在就创建(create),相称于kubectl create
如果资源已存在,就更新(update),相称于kubectl patch
kubernetes常用组件
1.谈谈大家构建k8s集群情况过程常见标题
2.简朴谈谈K8S集群架构设计原理
3.谈谈pod 、Namespace、Label、Deployment、Service之间关系
4.pod控制器原理、范例有哪些
5.pod的生命周期
6.实战K8S构建nginx集群情况 弹性扩容与缩容
20点25分准时开始
Namespace
不同定名空间是隔离的
1.Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为定名空间。
可以实现多套情况的资源隔离大概多租户的资源隔离。
2.资源的名称需要在定名空间内是唯一的,但不能跨定名空间。定名空间不能相互嵌套,每个 Kubernetes 资源只能在一个定名空间中。定名空间是在多个用户之间分别集群资源的一种方法(通过资源配额)
3.k8s集群中的所有的Pod都是可以相互访问的,将两个Pod分别到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理,不同的Namespace下的pod 相互之间是访问不同的。
执行下令 kubectl get ns 查看所有的 Namespace
1.default 没有指明使用别的定名空间的对象所使用的默认定名空间
2.kube-system Kubernetes 系统创建对象所使用的定名空间
3.kube-public 这个定名空间是自动创建的,所有用户(包罗未经过身份验证的用户)都可以读取它。这个定名空间主要用于集群使用,以防某些资源在整个集群中应该是可见和可读的。这个定名空间的公共方面只是一种约定,而不是要求。
创建Namespace
kubectl create ns mayikt-sit
删除Namespace
kubectl delete ns mayikt-sit
pod
Pod是在k8s集群进行管理的最小单位,程序要运行必须摆设在容器(docker)中,而容器必须存在于Pod中。
Pod是对(docker)容器的封装,容器在pod里面,1个Pod中可以存在一个大概多个容器。
1.kubectl create ns mayikt-sit
创建pod,先创建定名空间,不然就在Default下
2.运行一个 nginx pod
kubectl run nginx --image=nginx:1.17.9 --port=80 --namespace=mayikt-sit
3.kubectl get pod -n mayikt-sit 查看定名空间mayikt-sit下的pod
4.查看pod的ip
kubectl get pod -n mayikt-sit -o wide
5.更多pod详细信息
kubectl describe pod nginx-64777cd554-z6hgr -n mayikt-sit
6.删除pod
直接删除pod是删除不乐成的 ,pod控制器有会重新启动一个pod
kubectl get pods -n mayikt-sit
kubectl delete pod nginx-64777cd554-z6hgr -n mayikt-sit
继续执行 kubectl get pods -n mayikt-sit
我们将pod控制器删除 如许我们pod就可以删除啦
kubectl get deployment -n mayikt-sit 查询mayikt-sit下的控制器
删除pod控制器
kubectl delete deployment nginx -n mayikt-sit
kubectl get deployment -n mayikt-sit
kubectl get pods -n mayikt-sit
如许的我们的pod就被删除啦
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |