K8S基础笔记

这篇具有很好参考价值的文章主要介绍了K8S基础笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

查看构建信息

kubectl describe pod mynginx

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

删除配置文件创建的pod

kubectl delete -f pod.yaml

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

2.4、使用可视化dashboard创建pod

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

把2.3中的代码复制进行:

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

之后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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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 

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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最新版镜像

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

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

或者直接查看镜像:

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

 <4>版本回退

#回退到上次版本

kubectl rollout undo deployment/mytomcat

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

4.5、Service暴露方式

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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暴露方式

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

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

如:http://111.230.19.178:31634/


5、上述网络访问总结

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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不属于集群内的访问!!!

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker

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

K8S基础笔记,云原生,docker,kubernetes学习,kubernetes,云原生,docker文章来源地址https://www.toymoban.com/news/detail-753660.html

到了这里,关于K8S基础笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云原生Kubernetes:K8S概述

    目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 4.K8S网络 二、总结 (1)概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念,云原生更

    2024年02月10日
    浏览(55)
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

    目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念? 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几

    2024年02月03日
    浏览(199)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(72)
  • 云原生Kubernetes:K8S存储卷

    目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验  1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享目录 3.静态创建pv 报错 4.使用 Deployment 来创建

    2024年02月07日
    浏览(74)
  • 云原生Kubernetes:K8S安全机制

    目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜像拉取失败 四、总结 (1)概念 Kubernetes 作为一个分

    2024年02月07日
    浏览(70)
  • 【云原生K8S】Kubernetes之探针

    目录 一、探针是什么 二、探针类型  Ⅰ、livenessProbe 容器重启策略  Ⅱ、readinessProbe Ⅲ、startupProbe 执行顺序: 字段详情 三、探测机制 Ⅰ、HTTP GET探针 Ⅱ、TCP套接字探针 Ⅲ、Exec探针 探针:是由 kubelet 对容器执行的定期诊断 要执行诊断,则需kubelet 调用由容器实现的 Handler。

    2024年02月09日
    浏览(69)
  • 云原生_kubernetes(k8s)介绍

    目录 一、应用部署方式演变 二、k8s介绍 三、k8s的组件 四、k8s中的概念 五、k8s资源管理方式 1、命令式对象管理 2、命令式对象配置 3、声明式对象配置 在部署应用程序的方式上,主要经历了三个时代: 1 、物理机部署: 互联网早期,会直接将应用程序部署在物理机上 优点

    2023年04月13日
    浏览(60)
  • K8S+Docker学习笔记

    修改云服务器主机名称 获取服务器公有ip 生成ssh key Client:操作Docker主机的客户端/命令行/UI Docker_Host:安装Docker的主机 Docker daemon:运行在Docker主机上的Docker后台程序 Registry:Dcoker镜像仓库(Docker Hub) Images:Docker镜像 Containers:由镜像启动起来的程序(实例) 移除之前版本

    2023年04月11日
    浏览(35)
  • 云原生Kubernetes:K8S常用服务端口

    目录 一、理论 1.K8S常用服务端口号 (1)K8S集群 表1 K8S集群端口 协议 端口号 K8S集群 TCP 22 使用主机驱动通过SSH进行节点配置 TCP 53 集群DNS服务 UDP 53 集群DNS服务 TCP 2376 主机驱动与Docker守护进程通信的TLS端口 TCP 2379 etcd客户端请求 TCP 2380 etcd节点通信 UDP 8472 Canal/Flannel VXLAN ove

    2024年02月10日
    浏览(71)
  • 学习 K8S: Docker 基础

    了解 Docker 的起源、选择、安装方法,学习 Docker 的命令操作、架构,以及容器的本质、隔离技术和与虚拟机的比较,掌握容器化的作用、Dockerfile 的编写和 Docker Hub 的使用。

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包