首页 > 其他分享 >[K8S] k8s快速入门(1)

[K8S] k8s快速入门(1)

时间:2024-07-18 23:56:00浏览次数:18  
标签:kubectl K8S 入门 Kubernetes get 容器 Pod k8s pod

文章目录

K8S简介

Kubernetes(通常简称为K8s,因为其中间有8个字母)是一个开源的容器编排平台,用于自动化部署扩展操作应用程序容器
它最初由Google开发,现在由Cloud Native ComputingFoundation(CNCF)维护和支持。

Kubernetes提供了一个高度可扩展的平台,用于管理容器化应用程序和服务,使开发者能够更高效地管理应用程序的生命周期。
Kubernetes是设计用来管理容器化应用程序的。容器化允许开发者将应用程序及其所有依赖项打包到一个标准化单元中,这在不同环境中具有一致性可移植性

主要概念

Pod: 是Kubernetes的最小部署单元,可以包含一个或多个紧密关联的容器。Pod共享网络和存储资源,通常用于运行一组共享上下文的应用程序。

Deployment: 用于声明式地管理Pod的创建、更新和删除。Deployment可以确保应用程序始终运行在所需状态,并支持滚动更新和回滚操作。

Service: 定义了一组Pod的访问方式和策略,通过标签选择器将请求路由到正确的Pod。Service可以实现负载均衡、服务发现和跨服务通信。

Namespace: 用于在Kubernetes集群中划分资源的虚拟化单元。它可以帮助组织和管理集群中的资源,提供了一种多租户的机制。

Node: 是Kubernetes集群中的一个工作节点,负责运行Pod和容器。每个Node都具有Kubernetes代理(kubelet)和容器运行时(如Docker或containerd)。

Cluster: 是由多个工作节点组成的Kubernetes环境,用于托管和管理容器化应用程序。

架构

Kubernetes的架构通常包括以下核心组件:

Master节点:

  • kube-apiserver: 提供Kubernetes API服务,用于管理集群状态和配置。
  • etcd:分布式键值存储,用于持久化保存集群状态和配置。
  • kube-scheduler: 负责Pod的调度,将Pod分配到合适的工作节点上。
  • kube-controller-manager: 管理控制器,监控集群中各种资源的状态,并确保所需状态。

工作(worker)节点:

  1. kubelet: 在每个节点上运行,负责与Master节点通信,管理Pod的生命周期。
  2. kube-proxy:负责为Service实现网络代理和负载均衡功能。
  3. 容器运行时(如Docker或containerd): 负责运行Pod中的容器。

关键功能和优势

1. 自动化部署和扩展:
Kubernetes允许定义应用程序的期望状态,并自动管理其部署和扩展。通过Deployment、ReplicaSet等控制器,可以实现自动水平扩展和负载均衡。

2. 服务发现和负载均衡: 
使用Service抽象,可以轻松实现服务发现和对后端Pod的负载均衡,无需手动配置网络路由。

3. 自我修复: 
Kubernetes可以自动替换失败的容器或节点,并确保应用程序的高可用性。

4. 存储编排:
支持多种存储解决方案,并通过PersistentVolume和PersistentVolumeClaim提供动态存储分配和管理。

5. 密钥和配置管理: 
支持将敏感信息和配置数据以Secret和ConfigMap的形式存储,并安全地注入到Pod中。

使用场景

Kubernetes适用于各种场景,特别是复杂的分布式应用微服务架构,可以显著简化部署、管理和扩展。它也是云原生应用开发和部署的理想选择,支持跨云和混合云环境的工作负载管理。Kubernetes作为一个强大的容器编排平台,通过其丰富的功能和灵活的架构,帮助用户有效地管理和操作容器化应用程序,提升了应用程序的可靠性可伸缩性效率

k8s快速入门之命令行

1. k8s集群搭建

参考地址:文章写的非常好,一次搭建成功!
https://blog.csdn.net/weixin_52799373/article/details/140430146?spm=1001.2014.3001.5502

2. NameSpace命名空间

NameSpace介绍 中文名称:命名空间。 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个
Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 可以为你提供组织,安全甚至性 能方面的帮助!

Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或 用户组。常见的pods,
services, replication controllers和deployments等都是属于某一个namespace
的(默认是default),而node, persistentVolumes等则不属于任何namespace。

大多数的Kubernetes中的集群默认会有一个叫default的namespace。实际上,应该是4个:

  1. default:你的资源默认被创建于default命名空间。
  2. kube-system:kubernetes系统组件使用。
  3. kube-node-lease: kubernetes集群节点租约状态
  4. kube-public:公共资源使用。但实际上现在并不常用。

这个默认(default)的namespace并没什么特别,但你不能删除它。这很适合刚刚开始使用
kubernetes和一些小的产品系统。但不建议应用于大型生产系统。因为,这种复杂系统中,团队会非常
容易意外地或者无意识地重写或者中断其他服务service。相反,请创建多个命名空间来把你的
service(服务)分割成更容易管理的块。

作用:实现资源隔离 属于逻辑隔离 属于管理边界 不属于网络边界,可以针对每个namespace做资源配额

2.1 namespace常见语法

查看命名空间
kubectl get namespace 

查看所有命名空间的pod资源
 kubectl get pod --all-namespaces kubectl get pod -A
 
简写命令
kubectl get ns

创建NameSpace

kubectl create namespace xxx

简写命令
kubectl create ns xxx

删除NameSpace

kubectl delete namespace xxx
简写命令
kubectl delete ns xxx

3. Pod: 调度的最小单元

Pod是kubernetes集群能够调度的最小单元。Pod是容器的封装 。
在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个
容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同
一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务 相关的多个应用容器。

Pod有两个必须知道的特点。

网络:每一个Pod都会被指派一个唯一的Ip地址,在Pod中的每一个容器共享网络命名空间,包括Ip地址
和网络端口。在同一个Pod中的容器可以和localhost进行互相通信。当Pod中的容器需要与Pod外的实
体进行通信时,则需要通过端口等共享的网络资源。

存储:Pod能够被指定共享存储卷的集合,在Pod中所有的容器能够访问共享存储卷,允许这些容器共享
数据。存储卷也允许在一个Pod持久化数据,以防止其中的容器需要被重启。

Pod的工作方式
K8s一般不直接创建Pod。 而是通过控制器和模版配置来管理和调度 Pod模版

3.1 Pod常用命令

Pod重启 在Pod中的容器可能会由于异常等原因导致其终止退出,Kubernetes提供了重启策略以重启容器。重启
策略对同一个Pod的所有容器起作用,容器的重启由Node上的kubelet执行。 Pod支持三种重启策略

在配置文件中通过restartPolicy 字段设置重启策略:

  1. Always:只要退出就会重启。
  2. OnFailure:只有在失败退出(exit code不等于0)时,才会重启。
  3. Never:只要退出,就不再重启

3.2查看Pod

查看default命名空间下的
pods kubectl get pods 
查看kube-system命名空间下的pods 
kubectl get pods -n kube-system 
查看所有命名空间下的pods 
kubectl get pod --all-namespaces
kubectl get pod -A

3.3创建Pod

下载镜像

K8S集群的每一个节点都需要下载镜像:选择不同的基础镜像,下载镜像的大小也不同。 
docker pull tomcat:9.0.20-jre8-alpine108MB
docker pull tomcat:9.0.37-jdk8-openjdk-slim 305MB 
docker pull tomcat:9.0.37-jdk8531MB

docker save -o tomcat9.tar tomcat:9.0.20-jre8-alpine docker load -i tomcat9.tar
同学们可以自行下载后进行备份。 

3.4 运行pod

在default命名空间中创建一个pod副本的deployment 
kubectl run tomcat9-test --image=tomcat:9.0.20-jre8-alpine --port=8080

kubectl get pod 
kubectl get pod -o wide 

使用pod的IP访问容器
crul ***:8080

3.5Pod扩容

将副本扩容至3个 
kubectl scale --replicas=3 deployment/tomcat9-test

kubectl get deployment 
kubectl get deployment -o wide

使用deployment的IP访问pod

4. kubectl

kubectl 是 Kubernetes 集群的命令行工具。 Kubernetes 是一个用于容器编排和管理的开源平台,而 kubectl
则是与 Kubernetes 集群进行交互的主要方式。 通过 kubectl
,用户可以执行各种操作,部署和管理应用:创建、删除、更新部署(Deployment)、服务(Service)等资源对象。

  1. 可以使用 kubectl create deployment 命令创建一个新的部署。
  2. 查看集群状态和资源信息:获取节点(Node)、Pod、副本集(ReplicaSet)等的详细信息。通过 kubectl get pods 查看当前运行的 Pod 列表。
  3. 执行故障排查和调试:查看日志、描述资源对象的详细状态等。像 kubectl logs 可以获取指定 Pod 的日志。
  4. 扩展和缩放资源:增加或减少副本数量,以适应应用的负载变化。

4.1 kubectl常用命令

kubectl [command] [TYPE] [NAME] [flags]

command:指定要对一个或多个资源执行的操作,例如 create、get、describe、delete。

TYPE:指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。

kubectl get pod pod1 
kubectl get pods pod1  
kubectl get po pod1

NAME:指定资源的名称。名称区分大小写。
如果省略名称,则显示所有资源的详细信息

 kubectl get pods

在对多个资源执行操作时,您可以按类型和名称指定每个资源,或指定一个或多个文件:
要按类型和名称指定资源: 要对所有类型相同的资源进行分组,请执行以下操作:
TYPE1 name1 name2 name<#>。

例子:

kubectl get pod example-pod1 example-pod2 
分别指定多个资源类型:
TYPE1/name1 TYPE1/name2 
TYPE2/name3 TYPE<#>/name<#>。 

例子:

kubectl get pod/example-pod1 replicationcontroller/example-rc1 
用一个或多个文件指定资源: -f file1 -f file2 -f file<#> 

使用 YAML而不是JSON因为YAML更容易使用,特别是用于配置文件时。
例子:

kubectl get pod -f ./pod.yaml

flags : 指定可选的参数。例如,可以使用 -s 或 -server 参数指定 Kubernetes API 服务器的地址
和端口。

get命令

4.2kubectl get命令

kubectl get - 列出一个或多个资源

# 查看集群状态信息 
kubectl cluster-info

# 查看集群状态 
kubectl get cs

# 查看集群节点信息 
kubectl get nodes

# 查看集群命名空间 
kubectl get ns

# 查看指定命名空间的服务 
kubectl get svc -n kube-system

# 以纯文本输出格式列出所有 pod。 
kubectl get pods

# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。 
kubectl get pods -o wide

# 以纯文本输出格式列出具有指定名称的副本控制器。提示:您可以使用别名 'rc' 缩短和替换 replicationcontroller' 资源类型。 
kubectl get replicationcontroller <rc-name>

# 以纯文本输出格式列出所有副本控制器和服务。 
kubectl get rc,services

# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。 
kubectl get ds --include-uninitialized
# 列出在节点 server01 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01

4.3 describe命令

kubectl describe - 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。

# 显示名称为 <node-name> 的节点的详细信息。 
kubectl describe nodes <node-name>

# 显示名为 <pod-name> 的 pod 的详细信息。 
ubectl describe pods/<pod-name>

# 显示由名为 <rc-name> 的副本控制器管理的所有 pod 的详细信息。 # 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。 
kubectl describe pods <rc-name>

# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods --include-uninitialized=false

4.4 delete命令

kubectl delete` - 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。

# 使用 pod.yaml 文件中指定的类型和名称删除 pod。 
kubectl delete -f pod.yaml

# 删除标签名= <label-name> 的所有 pod 和服务。 
kubectl delete pods,services -l name=<label-name>

# 删除所有具有标签名称= <label-name> 的 pod 和服务,包括未初始化的那些。 
kubectl delete pods,services -l name=<label-name> --include-uninitialized

# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all

4.5进入容器命令

kubectl exec - 对 pod 中的容器执行命令。与docker的exec命令非常类似

# 从 pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。 
kubectl exec <pod-name> date

# 运行输出 'date' 获取在容器的 <container-name> 中 pod <pod-name> 的输出。
 kubectl exec <pod-name> -c <container-name> date
 
# 获取一个交互 TTY 并运行 /bin/bash <pod-name >。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> /bin/bash

4.6logs命令

kubectl logs - 打印 Pod 中容器的日志。

# 从 pod 返回日志快照。 
kubectl logs <pod-name>

# 从 pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f <pod-name>

4.7 其他命令

将pod信息格式化输出到一个yaml文件 
kubectl get pod web-pod-13je7 -o yaml

强制删除一个
pod --force --grace-period=0

缩写汇总
缩写汇总

标签:kubectl,K8S,入门,Kubernetes,get,容器,Pod,k8s,pod
From: https://blog.csdn.net/weixin_46965089/article/details/140534017

相关文章

  • 【Python爬虫实战入门】:笔趣阁小说爬取,一篇教你爬虫入门
    文章目录......
  • 反射快速入门
    反射就是通过字节码文件获取类的成员变量、构造方法和成员方法的所有信息。利用反射,我们可以获取成员变量的修饰符、名字、类型、取值。我们可以获取构造方法的名字、形参,并利用通过反射获取的构造方法创建对象。我们可以获取成员方法的修饰符、名字、形参、返回值、抛出的异常、......
  • RxJava快速入门
    简单来说RxJava是一个实现响应式编程的类库。那什么是响应式编程?响应式编程的核心思想是"数据流是第一等公民”,程序的逻辑建立在数据流的变化之上。响应式编程的几个核心概念:(1)数据流:在响应式编程中,数据以流(Streans)的形式存在。流就像一条河,源源不断。比如一个数组或集合可......
  • Java多线程入门
    创建线程的三种方式继承Thread类classMyThreadextendsThread{@Overridepublicvoidrun(){for(inti=0;i<100;i++){System.out.println(getName()+""+i);}}publicstaticvoidmain(String[]args......
  • 基于Python语言的入门算法和数据结构(持续更新中,求关注一波)[链表 栈 队列 复杂度 操作]
    这篇文章主要是讲的Python语言的算法,本人还在不断记笔记中,文章也会持续更新,内容比较浅薄,请大家指教另外推荐一个比较好用的记笔记的软件Typora,自己已经使用很久了,感觉不错。。。虽然但是还是有欠缺。目录第一章算法概述1.1什么是数据结构?01数据结构都有哪些组成方式02......
  • 自学网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    如何入门网络安全_网络安全自学由于我之前写了不少网络安全技术相关的故事文章,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人在微信里问我:我刚入门网络安全,该怎么学?要学哪些东西?有哪些方向?怎么选?不同于Java、C/C++等后端开发岗位有非常明晰的学习路线,网路安......
  • 自学网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    如何入门网络安全_网络安全自学由于我之前写了不少网络安全技术相关的故事文章,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人在微信里问我:我刚入门网络安全,该怎么学?要学哪些东西?有哪些方向?怎么选?不同于Java、C/C++等后端开发岗位有非常明晰的学习路线,网路安......
  • mysql入门
    1.mysql下载 https://dev.mysql.com/downloads/mysql/我下载的是这个(两个的区别:上面的是联网安装,下面的是直接下载到本地安装)  2.下载后点击安装,按照指示一直点击下一步就可以安装过程中需要记录自己设置的密码,以及WindowsServiceName,之后连接的时候需要用到。 ......
  • Windows入门
    1.隐藏和显示控制台窗口WM_SYSCOMMAND:系统命令消息。SC_MINIMIZE:将窗口最小化。SC_RESTORE:将窗口还原。#include<windows.h>intmain(){HWNDhWnd=GetConsoleWindow();::SendMessage(hWnd,WM_SYSCOMMAND,SC_MINIMIZE,NULL);//程序运行至此处后,控制台......
  • Shell编程速查手册(仅入门)
    一.Shell概述Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell脚本(shellscript),是一种为shell编写的脚本程序......