当前位置: 首页 > news >正文

k8s核心概念与kubectl命令行工具的使用

k8s官方文档
Kubernetes 文档 | Kubernetes
作用:
kubernetes用于容器化应用程序的部署,扩展和管理。
目标:
是让部署容器化应用简单高效。

Kubernetes集群架构与组件

Master组件

kube-apiserver
kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后在提交给Etcd存储。
kube-controller-manager
处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。例如:Deployment、Service
kube-scheduler
根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
etcd
分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。

Node组件

kubelet
kubelet是Master在node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
kube-proxy
在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
第三方容器引擎
容器引擎,运行容器,例如docker、containerd、podman

简要架构图


kubeconfig配置文件

常用kubectl命令

kubectl案例:

#使用镜像控制器部署镜像

kubectl create deployment java-demo --image=gyq/java-demo
kubectl get deployment,pods--image= 指定镜像地址,镜像来源有哪些?
1、docker hub公共镜像仓库,即镜像地址里不含IP或者域名的都是从这里下载的
2、私有镜像仓库、即镜像地址里包含ip或者域名

#使用Service将Pod暴露出去

kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort
kubectl get service

访问应用

​
http://NodeIP:Port    #端口随机生成,通过kubectl get service获取
--port=80    #service的端口,暂时还不用
--target-port=8080    #目标端口,即镜像中服务的端口 , 例如nginx 80、mysql 3306
--type=NodePort    #service类型,用于将容器暴露集群之外访问
kubectl get endpoints    #查看service关联的pod
kubectl get pods --show-labels    #查看pod标签
kubectl get pods -l app=java-demo    #根据标签筛选
​
命名空间=工作区
    应用场景:
        资源分类管理,可根据不同团队、项目划分命名空间
        基于命名空间权限授权
#创建命名空间
kubectl create namespace 命名空间名
#获取命名空间
default get namespace
·default:默认命名空间
·kube-system:k8s系统方面的命名空间
·kub-public:公开的命名空间,谁都可以访问
·kube-node-lease:k8s内部命名空间
获取所有命名空间
指定命名空间    -n
删除某个deployment
kubectl delete deployment/deployment_name -n namespacedeployment_name为具体的deployment名称namespace为具体的命名空间    #如果不指定命名空间,则在默认的命名空间中查找目标
案例:删除这三个deployment
删除第一个
全部删除了

基本资源概念

Pod: k8s最小部署单元,一组容器的集合
Deployment: 最常见的控制器,用于更高级别部署和管理Pod
Service:为一组Pod提供负载均衡,对外提供统一访问入口
Label:标签,附加到某个资源上,用于关联对象、查询和筛选
Namespaces:命名空间,将对象逻辑上隔离,也有利于权限控制

查看资源集群状态

查看master组件状态
kubectl get cs
查看node状态
kubectl get node
查看资源的详细:
kubectl describe <资源类型> <资源名称>
查看资源信息:
kubectl get <资源类型> <资源名称> #-o wide 、-o yaml

从master节点中移除node节点

在节点上的pod都被区逐后直接执行
第一步:kubectl delete node 节点名
第二步: 在被删除的node节点中清空集群数据信息
直接删除kubelet.conf和pki目录下的ca.crt
清空后
然后重启k8s和docker
systemctl restart kubelet
systemctl restart docker

监控集群资源利用率

查看Node资源消耗
kubectl top node <node name>
查看Pod资源消耗
kubectl top pod <pod name>
执行时可能会提示错误:error:Metrics API not available
这是因为这个命令需要由metric-server服务提供数据,而这个服务默认没有安装,还需要手动部署下。
kubectl top执行流程
kubectl top -> apiserver -> metric-server -> kubelet(cadvisor) -> 容器
Metrics Server部署默认使用证书
1、从网上新下载components.yaml文件内,然后镜像改成国内的地址
sed -i 's/k8s.gcr.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' 
2、还要按照下列步骤修改成忽略认证
https://kubelet     自签证书
1、携带kubelet所用https的根证书及客户端证书
2、忽略证书认证
方法:
增加一个kubelet-insecure-tls参数,这个参数作用是告诉metrics-server不验证kubele提供的https证书
然后apply
查看拉起的镜像
检查是否部署成功
kubectl get apiservices |grep metrics
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
如果状态True并能返回数据说明Metrics Server服务工作正常

部署的网络组建起什么作用?

部署网络组件的目的是打通Pod到Pod之间网络、Node与Pod之间网络,从而集群中数据包可以任意传输,形成了一个扁平化网络。
主流网络组件有:Flannel、Calico等
而所谓的CNI(容器网络接口)就是k8s对接这些第三方网络组件的接口。
CNI    容器网络接口
CRI    容器运行时接口
结论:解决容器跨主机通信问题

为什么Kubernetes移除默认docker

k8s核心代码优化
docker内部调用链比较复杂,多层封装和调用(某些功能用不上了),导致性能降低、提升了故障率、不易排查
docker还会在宿主机创建规则、存储卷,也带来了安全隐患

如何应对?

可通过cri-docker继续使用Docker,并了解其他主流容器运行时。
除了docker之外,CRI还支持很多容器运行时,例如:
containerd:  containerd与Docke相兼容,相比docker轻量很多,目前较为成熟
cri-o,podman:都是红帽(RedHat)项目,目前红帽主推podman
  
node : kube-proxy kubelet (systemd维护)
http://www.lryc.cn/news/6020.html

相关文章:

  • 【零基础入门前端系列】—无序列表、有序列表、定义列表(四)
  • 为什么重写equals还要重写hashcode方法
  • 电子技术——电流镜负载的差分放大器
  • go面试题
  • 攻防世界-Confusion1
  • 机器学习实战--梯度下降法进行波士顿房价预测
  • 黑马】后台管理-项目优化和上线
  • Web 框架 Flask 快速入门(三)数据库-MySQL
  • 牛客网Python篇数据分析习题(六)
  • Ansible的安装及部署
  • 链表题目总结 -- 递归
  • 重写-linux内存管理-伙伴分配器(一)
  • 为什么要用springboot进行开发呢?
  • 设备树信息解析相关函数
  • LeetCode-1124. 表现良好的最长时间段【哈希表,前缀和,单调栈】
  • vue-router路由配置
  • 中国计算机设计大赛来啦!用飞桨驱动智慧救援机器狗
  • 嘉定区2022年高新技术企业认定资助申报指南
  • 【C++】关键字、命名空间、输入和输出、缺省参数、函数重载
  • 【一道面试题】关于HashMap的一系列问题
  • 论文笔记: Monocular Depth Estimation: a Review of the 2022 State of the Art
  • Springmvc补充配置
  • MySQL 的 datetime等日期和时间处理SQL函数及格式化显示
  • 基于微信云开发的防诈反诈宣传教育答题小程序
  • Map和Set
  • 【位运算问题】Leetcode 136、137、260问题详解及代码实现
  • 同花顺2023届春招内推
  • 深入Kafka核心设计与实践原理读书笔记第三章消费者
  • IDEA 中使用 Git 图文教程详解
  • 【Linux系统】进程概念