K8S基础笔记

news2024/11/13 10:45:56

 1、namespace

  • 名称空间
  • 用来对集群资源进行隔离划分,默认只隔离资源,不隔离网络
  • k8s默认的名称空间为default

查看k8s的所有命名空间

kubectl get namespace

或者

kubectl get ns

创建名称空间

kubectl create ns 名称

或使用yaml方式

  1.  编写yaml
  2. kubectl apply -f yaml文件
appVersion: v1
kind: Namespace
metedata:
 name: hello

appVersion表示版本号,kind表示种类(说明是名称空间,若是pod就是pod类型),metedata.name表示名称为hello的名称空间

删除yaml方式创建的名称空间,需要这样删除:

#可以yaml文件和yaml文件执行的结果(这里是删除名称空间)
kubectl delete -f yaml文件

删除名称空间

kubectl delete ns 名称

注意以下命令

kubectl get pods -A

  • -A:All表示所有的名称空间
  • 这条命令表示获取所有名称空间下的所有pod

kubectl get pods

  • 没有指定名称空间,那么默认为default空间

kubectl get pods -n kubernetes-dashboard

  • -n:-namespace:用于指定名称空间
  • 这条命令表示获取kubernetes-dashboard空间下的所有pod

2、Pod

  • 运行中的一组容器,Pod是kubernetes中应用的最小单位
  • 一个Pod可以有一个或多个容器
2.1、命令行创建Pod
kubectl run mynginx --image=nginx
  • 没有指定namespace,默认在default下创建的Pod
  • mynginx:Pod的名称
  • --image=nginx:使用nginx镜像去构建该Pod,nginx由于没有指定镜像版本,默认使用最新的

删除Pod

kubectl delete pod mynginx
2.2、查看Pod的创建信息
kubectl describe pod pod的名称

会打印Pod的构建信息,如Pod的构建event事件

2.3、yaml创建Pod

创建一个pod.yaml(文件名任意命名),复制一下内容

  • 不知道namespace,默认在default下
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
#  namespace: default
spec:
  containers:
  - image: nginx
    name: mynginx

应用yaml

kubectl apply -f pod.yaml

查看构建信息

kubectl describe pod mynginx

删除配置文件创建的pod

kubectl delete -f pod.yaml

2.4、使用可视化dashboard创建pod

把2.3中的代码复制进行:

之后k8s在创建pod

2.5、查看pod日志
  • 类似于docker查看容器日志
kubectl logs pod名字

上述默认是查看default名称空间下的pod

指定名称空间获取pod日志:

kubectl logs pod名字 -n namespace名字
2.6、日志阻塞式追踪(实时更新日志)

-n namespace名字:缺省,则表示查询的是default名称空间

kubectl logs pod名字 -n namespace名字
2.7、获取pod更完善信息
kubectl get pod -o wide
  • -o wide:可以写成 -owide
  • 上述默认查询的是default名称空间,可以使用kubectl get pod -o wide -A获取所有pod

2.8、进入pod
kubectl exec -it pod名字 -- /bin/bash
2.9、pod中运行多个容器
  • 多个容器间端口存在冲突时,只会启动第一个容器,后面的容器会报端口冲突错误
  • 一个pod间的网络、存储空间是共享的,容器间可以通过127.0.0.1进行访问
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: myapp
  name: myapp
#  namespace: default
spec:
  containers:
  - image: nginx
    name: mynginx
  - image: tomcat8.5.68
    name: mytomcat

3、Deployment

  • 部署
  • 控制pod,使pod用于多副本、自愈、扩缩容等能力
3.1、创建deployment

语法:

kubectl create deployment deployment的名字 --image=镜像名称

eg:

kubectl create deployment mytomcat --image=tomcat:8.5.68
3.2、删除deployment

语法:

kubectl delete deployment deployment的名字

eg:

kubectl delete deployment mytomcat

与删除pod的区别

  • deployment创建的pod,可以用pod的删除语句去删除这个pod,但是k8s会自动创建下一个pod
  • 只有使用删除deployment语句,才能彻底删除deployment创建的pod
3.3、多副本

语法:

kubectl create deployment deployment的名字 --image=镜像名称 --replicas=pod的数量

eg:

kubectl create deployment mytomcat --image=tomcat:8.5.68 --replicas=3

如下图,创建了3个pod 

yaml文件配置方式

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mytomcat
  name: mytomcat
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mytomcat
  template:
    metadata:
      labels:
        app: mytomcat
    spec:
      containers:
      - image: tomcat
        name: tomcat
3.4、扩缩容
  • 其实就是改变deployment下的pod数量
  • 当我们pod在运行期间只有3个,需要增加pod数量去支持访问量时,这个就称为扩容
  • 需要减少pod数量去支持访问量时,这个就称为缩容

语法:

kubectl scale deployment/deployment的名字 --replicas=pod的数量

eg::

kubectl deployment/mytomcat scale --replicas=5
3.5、自愈与故障转移

自愈:deployment下的pod出现问题,k8s会对该pod自动进行重启修复

故障转移:当一个pod所在的节点宕机后,k8s会把宕机的pod自动拉到其他的node进行运行

3.7、滚动更新

假设deployment下有3个pod,这3个pod为同一个镜像应用,当该镜像更新时,需要对k8s的pod进行更新,而滚动更新的作用就是:

  • 能保证镜像更新后,pod能平滑更新到下一个版本

更新步骤:

  1. k8s接收到滚动更新指令
  2. 启动1个新版本的镜像pod,当该pod启动完成后,k8s会杀掉3个镜像中的一个pod
  3. 然后再启动1个新pod,pod启动完成后,再杀掉1个旧pod
  4. 以此类推,直到新pod全部上线,旧pod全部下线,滚动更新完成

滚动更新只需要一个指令,即可执行上述步骤:

语法:

  • --record表示记录下这次更新
kubectl set image deployment/deployment的名字 原镜像=新镜像 --record

eg:

kubectl set image deployment/mytomcat tomcat=tomcat --record

3.8、命令修改deployment配置
kubectl edit deployment mytomcat #mytomcat为deployment的名字
3.9、版本回退

k8s支持deployment版本回退,且回退是滚动更新的过程!

回退流程:

<1>查看deployment的版本列表

格式:

kubectl rollout history deployment/deployment的名字

eg:

kubectl rollout history deployment/mytomcat

CHANGE-CAUSE:类似于GIT每次提交的message,只是k8s可以不写(none),在变更deployment的时,使用 --record来保存记录,参考3.7

<2>检查当前deployment使用的镜像版本

kubectl get deployment mytomcat -oyaml

或者

kubectl get deployment mytomcat -oyaml | grep tomcat
  • tomcat的镜像为tomcat最新版镜像

<3>查看某个版本的yaml详情

kubectl rollout history deployment/mytomcat --revision=1
  •  --revision=历史版本的编号

或者直接查看镜像:

kubectl rollout history deployment/mytomcat --revision=1 | grep image

 <4>版本回退

#回退到上次版本

kubectl rollout undo deployment/mytomcat

#回退到指定版本
kubectl rollout undo deployment/mytomcat --to-revision=1

3.10、工作负载

除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job  等 类型资源。我们都称为 工作负载。
有状态应用使用  StatefulSet  部署,无状态应用使用 Deployment 部署
官方文档:https://kubernetes.io/zh/docs/concepts/workloads/controllers/


4、Service

  • 服务
  • 将一组 Pods 公开为网络服务的抽象方法。
  • Pod的服务发现与负载均衡(服务发现指的是能感知同一组pod的上线下线变更,与注册中心一样)
  • 该暴露出来的IP或域名,只能集群内部访问,不能外部访问
  • Service的默认域名为:服务名.所在名称空间.svc,如:mytomcat.default.svc

不使用service时存在的问题:

  1. 当一个项目需要启动多个pod,每个pod的IP是不同的,假设我们通过某一个pod的IP去访问项目,若该pod宕机后,我们需要手动切换pod的IP(虽然可以使用nginx的负载均衡去实现切换,但是无状态pod的IP是会改变的,除非每次去变更nginx的配置)
  2. 当一个项目存在多个pod时,我们只能去连接某一个pod,并不能把所有的pod的资源使用起来

Service解决的问题:

  • 把相同标签的一组pod暴露成一个统一访问的服务,我们只需要访问service即可访问标签中的所有pod(负载均衡的方式)
4.1、暴露Service命令
kubectl expose deploy deployment的名字 --port=指定暴露的端口 --target-port=pod中需要暴露的端口
  • --port:指定暴露的端口,外部访问时的端口
  • --target-port:pod中需要暴露的端口,一般为pod中应用的端口

eg:把mytomcat的deployment中,pod的8080端口暴露给service服务8000端口

kubectl expose deploy mytomcat --port=8000 --target-port=8080
4.2、获取k8s下的service列表
kubectl get svc -A

或者

kubectl get svc

4.3、yaml方式生成Service
apiVersion: v1
kind: Service
metadata:
  labels:
    app:mytomcat
  name: mytomcat
spec:
  selector:
    app: mytomcat    #pod的标签
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 8080
  • selector.app:pod的标签label,用于给pod分类的
  • pod的标签若不指定,一般默认为deployment的名字
4.4、获取pod的标签
kubectl get pod --show-labels

4.5、Service暴露方式

默认方式(clusterIP 集群IP访问):

kubectl expose deployment mytomcat --port=8000 --target-port=8080

等同于:

kubectl expose deployment mytomcat --port=8000 --target-port=8080 --type=ClusterIP

yaml方式:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: mytomcat
  name: mytomcat
spec:
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 8080
  selector:
    app: mytomcat
  type: ClusterIP    #NodePort集群外访问

NodePort暴露方式

kubectl expose deployment mytomcat --port=8000 --target-port=8080 --type=NodePort

  • k8s会自动生成一个提供外部访问的端口
  • NodePort范围在 30000-32767 之间

  • 访问方式:集群任意node节点+端口,即可访问Service

如:http://111.230.19.178:31634/


5、上述网络访问总结

1、节点与节点直接是否能正常通信的判断缘由
kubectl get node -owide
  • node节点加入k8s是外网IP,证明节点间的通信是没有问题的(就是确保node节点以外网的方式接入的) 

2、pod的IP访问范围
  • 一般除了搭建k8s时生成的pod,使用机器外网IP或master节点的IP外,其余在k8s集群搭建好的基础上,生成的pod,会使用master初始化时pod-network-cidr的网络范围(需要确保calico的网段与之一致)
  • pod-network-cidr的网络范围:指的是k8s给pod分配的IP地址的范围,这个IP只能集群内部访问!!!
  • 这里的集群内部是指K8S内pod互相访问,而不是k8s节点进行访问!
  • 节点访问pod的IP不属于集群内的访问!!!

3、Service暴露方式访问的范围
  • 以clusterIP暴露方式的访问范围,指的是集群内的访问!!!不是k8s节点进行访问
kubectl expose deployment mytomcat --port=8000 --target-port=8080
  • 以NodePort暴露方式的访问范围
kubectl expose deploy mynginx --port=8000 --target-port=80 --type=NodePort

因为calico问题,我现在只能在mynginx的工作节点才能访问上述service的IP

如下(在我的k8s-node1中访问):

浏览器使用k8s-node1的IP家31522端口:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1231282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vs添加 高级保存选项

工具-自定义-命令-菜单栏-文件-添加命令-文件-高级保存选项

win10手机投屏到电脑的操作方法

工具/原料&#xff1a; 系统版本&#xff1a;iOS 15.3,HarmonyOS 2.0.0&#xff0c;windows10系统 品牌型号&#xff1a;iPhone 13,HUAWEI Mate 40 Pro&#xff0c;联想小新air14 方法/步骤&#xff1a;方法一&#xff1a;安卓手机使用无线投屏功能投屏到win10电脑 1、保持手…

赴日开发工程师是做什么的?

日本的软件开发岗位对技术要求和沟通能力都有较高的要求&#xff0c;赴日开发工程师主要负责软件设计、开发和测试&#xff0c;包括编写代码、测试代码和修复漏洞等工作。开发人员必须对软件架构、设计模式和业务逻辑有深入的理解&#xff0c;并能做出合适的技术决策。 当然&a…

细说MySQL数据类型

TOC 目录 MySQL数据类型 数据类型分类 数值类型 tinyint类型 有符号tinyint范围测试 无符号tinyint范围测试 bit类型 bit类型的显示方式 bit类型的范围测试 float类型 有符号float范围测试 无符号float范围测试 decimal类型 字符串类型 char类型 char类型测试 …

IObit Unlocker丨解除占用程序软件

更多内容请收藏&#xff1a;https://rwx.tza-3.xyz 官网&#xff1a;IObit Unlocker “永远不用担心电脑上无法删除的文件。” 界面简单&#xff0c;支持简体中文&#xff0c;一看就会&#xff0c;只需要把无法删除/移动的文件或整个U盘拖到框里就行。 解锁率很高&#xff0c;…

【云栖 2023】林伟:大数据 AI 一体化的解读

云布道师 本文根据 2023 云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;林伟 | 阿里云研究员&#xff0c;阿里云计算平台事业部首席架构师&#xff0c;阿里云人工智能平台 PAI 和大数据开发治理平台 DataWorks 负责人 演讲主题&#xff1a…

软件测试:测试分类

一. 按照测试对象划分 1.1 界面测试 界面测试(简称UI测试),按照界面的需求(UI设计稿)和界面的设计规则,对我们软件界面所展示的全部内容进行测试和检查,一般包括如下内容: • 验证界面内容的完整性,一致性,准确性,友好性,兼容性.比如页面内容对屏幕大小的自适应,换行,内容是否…

认识前端包常用包管理工具(npm、cnpm、pnpm、nvm、yarn)

随着前端的快速发展,前端的框架越来越趋向于工程化,所以对于包的使用也越来越多,为了优化性能和后期的维护更新,对于前端包的管理也尤为重要,本文主要阐述对node中包管理工具的理解和简单的使用方法。也欢迎各位大佬和同行们多多指教。😁😁😁 👉1. npm 安装npm 通…

Django 入门学习总结6 - 测试

1、介绍自动化测试 测试的主要工作是检查代码的运行情况。测试有全覆盖和部分覆盖。 自动测试表示测试工作由系统自动完成。 在大型系统中&#xff0c;有许多组件有很复杂的交互。一个小的变化可能会带来意想不到的后果 测试能发现问题&#xff0c;并以此解决问题。 测试驱…

Azure Machine Learning - 什么是 Azure AI 搜索?

Azure AI 搜索&#xff08;以前称为“Azure 认知搜索”&#xff09;在传统和对话式搜索应用程序中针对用户拥有的内容提供大规模的安全信息检索。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦…

8、创建第一个鸿蒙页面并实现页面跳转

一、创建页面 1、新建页面 在项目的"pages"目录上右键&#xff0c;选择”新建“——”page" 2、录入页面的名称 在“Page name”中输入页面的名称&#xff0c;并点击“Finish”完成创建 3、以下为创建的新页面 2、注册页面 新建的页面会自动在“resources”…

Python---PyCharm调试技巧--Step over(F8)、Step into(F7)

Step over&#xff08;F8&#xff09;&#xff1a;代码一步一步向下执行&#xff0c;但是遇到了函数以后&#xff0c;不进入函数体内部&#xff0c;直接返回函数的最终的执行结果。------------遇到函数跳过&#xff0c;直接执行最后的结果。 Step into&#xff08;F7&#xf…

SpringBoot——静态资源及原理

优质博文&#xff1a;IT-BLOG-CN 一、使用 SpringBoot 的步骤 【1】创建SpringBoot应用&#xff0c;选中自己需要的模块。 【2】SpringBoot已经默认将这些场景配置好&#xff0c;只需要在配置文件中指定少量配置就可以运行起来。 【3】编写业务逻辑代码。 二、自动配置原理 …

iceberg学习笔记(2)—— 与Hive集成

前置知识&#xff1a; 1.了解hadoop基础知识&#xff0c;并能够搭建hadoop集群 2.了解hive基础知识 3.Iceberg学习笔记&#xff08;1&#xff09;—— 基础知识-CSDN博客 可以参考&#xff1a; Hadoop基础入门&#xff08;1&#xff09;&#xff1a;框架概述及集群环境搭建_TH…

归并排序详解:递归实现+非递归实现(图文详解+代码)

文章目录 归并排序1.递归实现2.非递归实现 归并排序 时间复杂度&#xff1a;O ( N * logzN ) 每一层都是N,有log2N层空间复杂度&#xff1a;O&#xff08;N&#xff09;&#xff0c;每个区间都会申请内存&#xff0c;最后申请的数组大小和array大小相同稳定性&#xff1a;稳定 …

【Java程序员面试专栏 算法训练篇】二叉树高频面试算法题

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是二叉树相关汇总的高频题目 遍历二叉树 遍历二叉树,分为递归和迭代两种方式,递归类似于DFS,迭代类似于BFS,【算法训练-二叉树 一】【遍历二叉树】前序遍历、中序遍历、后续遍…

OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测

文章目录 前言一、直方图基础1.1 直方图的概念和作用1.2 使用OpenCV生成直方图1.3 直方图归一化1.3.1 直方图归一化原理1.3.2 直方图归一化公式1.3.3 直方图归一化代码示例1.3.4 OpenCV内置方法&#xff1a;normalize()1.3.4.1 normalize()方法介绍1.3.4.2 normalize()方法参数…

C语言——1.入门须知

文章目录 1.C语言的简要概述1.1.C语言类比自然语言1.2.计算机语言的发展1.3.C语言在当今的地位1.4.C语言的优势和劣势1.4.1.C语言的优势1.4.2.C语言的劣势 2.C语言的应用场景3.C语言的学习路径3.1.学习目的3.2.学习路径3.3.学习资源3.3.1.推荐书籍3.3.2.推荐课程3.3.3.推荐题库…

安全项目简介

安全项目 基线检查 密码 复杂度有效期 用户访问和身份验证 禁用administrator禁用guest认证失败锁定 安全防护软件操作系统安全配置 关闭自动播放 文件和目录权限端口限制安全审计… 等保测评 是否举办了安全意识培训是否有应急响应预案有无第一负责人 工作内容 测评准备…

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本

利用shell命令写的脚本文件&#xff0c;后缀是.sh shell脚本是一个解释型语言&#xff0c;不需要编译&#xff0c;可直接执行 书写&#xff1a;vi test.sh #!/bin/bash&#xff1a;说明使用的是/bin目录下的bash 说明完后即可编写脚本文件 bash test.sh&#xff1a;运行文…