美文网首页
k8s相关组件与资源

k8s相关组件与资源

作者: 小李飞刀_lql | 来源:发表于2021-11-11 21:52 被阅读0次

k8s组件

架构图

1636466520548.png

Master组件

kube-apiserver

001 Kubernetes API,集群的统一入口
002 各组件协调者,以RESTful
003 API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer
004 APIServer处理后再提交给Etcd存储

kube-controller-manager

001 处理集群中常规后台任务
002 一个资源对应一个控制器,ControllerManager就是负责管理这些控制器的。
003 比如:容器部署,副本管理

kube-scheduler

001 根据调度算法为新创建的Pod选择一个Node节点
002 可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上

etcd

001 分布式键值存储系统
002 用于保存集群状态数据,比如Pod、Service等对象信息
003 etcd数据库属于单独的组件

Node组件

kubelet

001 kubelet是Master在Node节点上的Agent
002 管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。003 kubelet将每个Pod转换成一组容器

kube-proxy

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作

docker或rocket

容器引擎,运行容器。

CNI网络模型

网络模型

1636600296944.png

网络组件要求

K8s是一个扁平化网络,即所有部署的网络组件都必须满足如下要求:
001 一个Pod一个IP
002 所有的 Pod 可以与任何其他 Pod 直接通信
003 所有节点可以与所有 Pod 直接通信
004 Pod 内部获取到的 IP 地址与其他 Pod 或节点与其通信时的 IP 地址是同一个

----------------------------------------------------------------------------------
主流网络组件有:Flannel、Calico等

kubeconfig配置文件

文件配置

1636601027339.png
001 kubectl使用kubeconfig认证文件连接K8s集群
002 current-context: kubernetes-admin@kubernetes

node节点执行kubectl命令

#将配置文件从master复制到node
[root@k8smaster ~]# scp -r /etc/kubernetes/admin.conf root@192.168.153.22:/root
#node执行
[root@k8snode1 ~]# ls
admin.conf  
[root@k8snode1 ~]# kubectl get node --kubeconfig=admin.conf
NAME        STATUS   ROLES    AGE   VERSION
k8smaster   Ready    master   11d   v1.19.0
k8snode1    Ready    node     11d   v1.19.0
#或者将该配置文件复制到指定的位置
[root@k8snode1 ~]# mkdir -p $HOME/.kube
[root@k8snode1 ~]# sudo cp -i admin.conf $HOME/.kube/config                
[root@k8snode1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8snode1 ~]# kubectl get node
NAME        STATUS   ROLES    AGE   VERSION
k8smaster   Ready    master   11d   v1.19.0
k8snode1    Ready    node     11d   v1.19.0

基本资源

Pod

Pod:K8s最小部署单元,一组容器的集合

Deployment

Deployment:最常见的控制器,用于更高级别部署和管理Pod

#使用Deployment控制器部署镜像:
[root@k8smaster ~]# kubectl create deployment web --image=lizhenliang/java-demo
[root@k8smaster ~]# kubectl get deploy,pods
NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/web              1/1     1            1           6m30s
NAME                                 READY   STATUS    RESTARTS   AGE
pod/web-674477549d-9mtlc             1/1     Running   0          6m30s
#查看资源信息
[root@k8smaster ~]# kubectl describe pod web-674477549d-9mtlc
...
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  9m9s   default-scheduler  Successfully assigned default/web-674477549d-9mtlc to k8snode1
  Normal  Pulling    9m8s   kubelet, k8snode1  Pulling image "lizhenliang/java-demo"
  Normal  Pulled     7m41s  kubelet, k8snode1  Successfully pulled image "lizhenliang/java-demo" in 1m26.918609395s
  Normal  Created    7m41s  kubelet, k8snode1  Created container java-demo
  Normal  Started    7m41s  kubelet, k8snode1  Started container java-demo
  001 分配节点
  002 下载镜像
  003 创建容器
  004 容器启动
  

Service

001 为一组Pod提供负载均衡,对外提供统一访问入口
002 该组pod拥有相同的标签
[root@k8smaster ~]# kubectl scale deployment web --replicas=3
[root@k8smaster ~]# kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort
#此时,svc为deployment为web的3个pod做负载均衡
[root@k8smaster ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
web          NodePort    10.100.231.77    <none>        80:31588/TCP   2m7s

[root@k8smaster ~]# curl 10.100.231.77
#可以在浏览器访问
http://192.168.153.21:31588/
1636637626292.png

Label

标签,附加到某个资源上,用于关联对象、查询和筛选

[root@k8smaster ~]# kubectl get pod --show-labels  
NAME                             READY   STATUS    RESTARTS   AGE     LABELS
nginx-6799fc88d8-764c4           1/1     Running   10         11d     app=nginx,pod-template-hash=6799fc88d8
nginx-log-demo-95677644f-dtdhh   2/2     Running   4          5d2h    app=gateway,pod-template-hash=95677644f,project=microservice
web-674477549d-94jlv             1/1     Running   0          8m52s   app=web,pod-template-hash=674477549d
web-674477549d-9mtlc             1/1     Running   0          21m     app=web,pod-template-hash=674477549d

[root@k8smaster ~]# kubectl get pod -l app=web
NAME                   READY   STATUS    RESTARTS   AGE
web-674477549d-94jlv   1/1     Running   0          10m
web-674477549d-9mtlc   1/1     Running   0          23m

Namespaces

概述

命名空间,将对象逻辑上隔离,从而形成多个虚拟集群。

应用场景

001 根据不同团队划分命名空间
002 根据项目划分命名空间

查看命名空间

[root@k8smaster ~]# kubectl get namespace
NAME                   STATUS   AGE
default                Active   11d
kube-node-lease        Active   11d
kube-public            Active   11d
kube-system            Active   11d
kubernetes-dashboard   Active   11d

两种方法指定资源命名空间

命令行加 -n
yaml资源元数据里指定namespace字段
[root@k8smaster ~]# kubectl create namespace test
namespace/test created
[root@k8smaster ~]# kubectl get namespace
...
test                   Active   4s

相关文章

网友评论

      本文标题:k8s相关组件与资源

      本文链接:https://www.haomeiwen.com/subject/dmngzltx.html