云原生 - Kubernetes基础知识学习

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 云原生 - Kubernetes基础知识学习

知识库链接:

Kubernetes · 语雀


Kubernetes简称K8s(K和s中间有8个字母)

官方文档:

Kubernetes

在K8s中,创建核心应用配置都可以使用三种方式。

  1. 命令
  2. yaml配置文件
  3. 图形化界面

区别:

这两种方式都是创建 ConfigMap,但有一些区别:

  1. 命令行创建 (kubectl create cm redis-conf --from-file=redis.conf):
  • 使用命令行创建 ConfigMap,你直接在命令行中指定了要创建的 ConfigMap 的名称,并从文件中加载配置数据。这种方式适合于一次性的、简单的操作。
  • 这种方式创建的 ConfigMap 不会生成配置文件,而是直接将配置数据存储在 Kubernetes 中。
  1. YAML 文件创建 (kubectl apply -f xxx.yaml):
  • 使用 YAML 文件创建 ConfigMap,你可以在一个文件中定义 ConfigMap 的配置,包括名称、命名空间、配置数据等。
  • 这种方式创建的 ConfigMap 配置会保存在一个 YAML 文件中,你可以根据需要对其进行版本控制,并且可以很容易地修改和重用。

总的来说,命令行创建适合于临时、快速的操作,而 YAML 文件创建适合于更为复杂的配置,以及需要长期维护和版本控制的场景。两者最终都会在 Kubernetes 中创建一个 ConfigMap 对象,用来存储配置数据。

1. Kubernetes

特性:

  1. 服务发现和负载均衡

kubernetes可以使用DNS或IP地址公开容器。如果容器流量大,K8S可以负载均衡并分配网络流量,从而使部署稳定

  1. 存储编排

K8S 允许自动挂载存储系统,如本地存储,公有云提供商。

  1. 自动部署和回滚

K8S可以根据你期望的状态,自动化K8S来部署创建新容器,删除现有容器并将他们的所有资源用于新容器。

  1. 自动完成装箱计算

K8S允许你指定每个容器所需要的CPU和内存(RAM)。当容器指定了资源请求时,K8S可以做出更好的决策来管理容器的资源

  1. 自我修复

K8s可以重新启动失败的容器,替换,杀死不响应用户定义状态的容器。

  1. 密钥与配置管理

K8s允许存储和管理敏感信息,如密码、OAuth令牌和ssh密钥。

Kubernetes是一个可弹性运行分布式系统的框架。会满足上方所有的特性。

2. 组件架构

3. 集群部署

具体安装步骤可见:

Kubernetes基础概念 · 语雀

4. K8s相关命令

#查看集群节点   #######在master机器上看
kubectl get nodes
 
#根据配置文件,给集群创建资源
kubectl apply -f xxx.yaml
 
#查看集群部署了那些应用 此条命令类似于 docker ps 运行中的应用在docker中叫容器 在k8s中叫pod
kubectl get pods -A 
 
#创建名称空间 namespace 简称ns
kubectl create ns hello
kubectl delete ns hello
ⅰ. 创建pod--- 命令行
########################## pod相关命令
kubectl run mynginx --image=nginx
 
# 查看default名称空间的Pod
kubectl get pod 
# 描述
kubectl describe pod 你自己的Pod名字
# 删除
kubectl delete pod Pod名字
# 查看Pod的运行日志
kubectl logs Pod名字
 
# 每个Pod - k8s都会分配一个ip
kubectl get pod -owide
# 使用Pod的ip+pod里面运行容器的端口
curl 192.168.169.136
 
# 集群中的任意一个机器以及任意的应用都能通过Pod分配的ip来访问这个Pod
ⅱ. 创建pod ---yaml
  1. 运行yaml创建的pod kubectl apply -f xxxx.yaml
  2. 删除以配置文件创建的pod
    直接删除配置文件即可kubectl delete -f pod.yaml
# 每隔一秒运行下kubectl get pod
watch -n 1 kubectl get pod
curl 127.0.0.1:80
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
#  namespace: default
spec:
  containers:
  - image: nginx
    name: mynginx
    
    
    
####################################一个pod配置多个容器  ###########################
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: myapp
  name: myapp
spec:
  containers:
  - image: nginx
    name: nginx
  - image: tomcat:8.5.68
    name: tomcat

ⅲ. Deployment
#删除同一个命名空间多个pod  default是命名空间名字
kubectl delete pod myapp mynginx -n default 
 
kubectl get pod
kubectl get pod -owide #可以查看出pod的IP等详细信息
 
# 清除所有Pod,比较下面两个命令有何不同效果?
kubectl run mynginx --image=nginx
 
kubectl delete pod xxx(kubectl get pod 获取的name )
 
kubectl create deployment mytomcat --image=tomcat:8.5.68
# 自愈能力 删除pod后会继续自启
#删除
kubectl delete deploy mytomcat
1. 多副本

每种特性对应三种部署方式,此处仅展示 1. bash方式

  1. yaml参考:Kubernetes核心实战 · 语雀
  2. 图形化界面
kubectl create deployment my-dep --image=nginx --replicas=3
2. 扩缩容
#扩容缩容只需要修改后面的数字即可
kubectl scale  deployment/my-dep --replicas=5
#缩容
kubectl scale  deployment/my-dep --replicas=3 

3. 自愈&故障转移

自愈的意思是pod如果突然停止,K8s会自动重启

故障转移的意思是pod在某一节点出现问题,会自动转移到其他节点

4. 滚动更新
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --reload
  • deployment/my-dep: deployment 表示 Kubernetes 中的一种资源类型,即部署(Deployment)。而 my-dep 是具体部署对象的名称。因此,my-dep 是这个 Deployment 资源的实例名称,而不是状态。
  • nginx=nginx:1.16.1: 这指定了要更新的容器的名称和新的镜像。在这个例子中,nginx 是容器的名称,nginx:1.16.1 是新的镜像标签。
  • --reload: 这个标志告诉 Kubernetes 重新加载 Deployment 以应用更改。
#deployment/my-dep: deployment是负载状态,而my-dep是deployment负载状态的实例名称
kubectl set image deployment/my-dep nginx=nginx:1.16.1  --reload
kubectl rollout status deployment/my-dep
 
 
kubectl edit deployment my-dep
 
#修改 replicas

5. 版本回退
#历史记录
kubectl rollout history deployment/my-dep
 
 
#查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2
 
#回滚(回到上次)
kubectl rollout undo deployment/my-dep
 
#回滚(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2


6. 其他工作负载

5. K8s相关概念

a. Pod

pod容器与docker创建的容器区别

在Docker中,通常建议一个容器只运行一个主要应用程序,这是因为Docker容器的设计初衷是为了实现单一进程的隔离和管理。虽然在一个Docker容器中可以运行多个进程,但这通常不是推荐的做法,因为这样会增加容器的复杂性和难以管理性。


相比之下,Kubernetes中的Pod可以包含多个容器,并且这些容器可以共享资源和网络。这意味着在一个Pod中可以运行多个应用程序,这些应用程序可以共享同一个网络命名空间、存储卷等资源。这种设计使得Kubernetes中的Pod更灵活,可以用于运行多个紧密相关的应用或服务,并且它们可以共享一些资源和相互通信。


因此,虽然在Docker中通常建议一个容器只运行一个应用程序,但在Kubernetes中的Pod可以包含多个容器,每个容器可以运行一个独立的应用程序,从而实现多个应用程序在同一个Pod中运行的情况。

b. 命名空间

是的,Kubernetes中的命名空间(Namespace)是用来对集群中的资源进行逻辑分组和隔离的机制。一个命名空间可以包含多个Pod、Service、Deployment等各种资源对象。

在Kubernetes中,Pod是最小的可部署单元,它可以包含一个或多个容器。这些Pod可以被部署到不同的命名空间中,一个命名空间可以包含多个Pod,这些Pod之间可以相互关联或独立存在。


通过使用命名空间,可以实现对不同应用、团队或环境的资源进行隔离和管理。每个命名空间都有自己的资源范围,资源对象在同一个命名空间内是唯一的,但不同命名空间之间的资源对象可以重名。


因此,一个命名空间可以包含多个Pod,而这些Pod可以是属于同一个应用或服务的不同实例,也可以是完全不同的应用程序。命名空间的使用有助于更好地组织和管理Kubernetes集群中的资源。

c. 相关术语

节点(Nodes)就是服务器。

Pod是K8s中最小的可部署单元,一个Pod有一个或多个容器。

在Kubernetes中,术语"实例"通常不用于描述服务器或Pod。让我们澄清一下:

  1. 服务器(Nodes):Kubernetes集群由多个节点(Nodes)组成,每个节点可以是物理服务器、虚拟机或其他计算资源。节点是集群中的工作单元,负责运行Pod和其他Kubernetes对象。
  2. Pods:Pod是Kubernetes中最小的可部署单元,它可以包含一个或多个容器。Pod中的容器共享网络命名空间和存储卷,它们可以在同一节点上运行,共享节点的资源。一个节点可以运行多个Pod。
  3. 实例(Instances):在Kubernetes中,"实例"通常用于描述应用程序、服务或部署的副本数量。例如,如果您有一个Deployment对象,您可以指定要运行的Pod副本数量,这些副本被称为实例。每个实例是一个Pod的副本,它们可以在同一节点或不同节点上运行。

因此,在Kubernetes中,实例通常指的是Pod的副本数量,而节点(Nodes)是物理或虚拟服务器,它们组成集群并提供计算资源来运行Pod。每个节点可以运行多个Pod,而每个Pod可以包含一个或多个容器


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
12天前
|
Prometheus Kubernetes Cloud Native
云原生周刊:Argo Rollouts 支持 Kubernetes Gateway API 1.0 | 2024.7.1
探索开源世界:Kubetools的推荐系统[Krs](https://github.com/kubetoolsca/krs)助力K8s优化,追踪K8s组件清单,指引IAC集成。阅读建议: Prometheus与Thanos的进化故事,Adidas容器平台管理经验,K8s请求实现详解。关注云原生:Argo Rollouts支持Gateway API 1.0,Kubewarden v1.14强化策略与镜像安全。
|
7天前
|
Kubernetes Cloud Native 微服务
企业级容器部署实战:基于ACK与ALB灵活构建云原生应用架构
这篇内容概述了云原生架构的优势,特别是通过阿里云容器服务Kubernetes版(ACK)和应用负载均衡器(ALB)实现的解决方案。它强调了ACK相对于自建Kubernetes的便利性,包括优化的云服务集成、自动化管理和更强的生态系统支持。文章提供了部署云原生应用的步骤,包括一键部署和手动部署的流程,并指出手动部署更适合有技术背景的用户。作者建议在预算允许的情况下使用ACK,因为它能提供高效、便捷的管理体验。同时,文章也提出了对文档改进的建议,如添加更多技术细节和解释,以帮助用户更好地理解和实施解决方案。最后,展望了ACK未来在智能化、安全性与边缘计算等方面的潜在发展。水文一篇,太忙了,见谅!
|
25天前
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
|
19天前
|
Kubernetes Cloud Native Shell
云原生 - K8s命令合集
云原生 - K8s命令合集
19 0
|
6天前
|
运维 Cloud Native 持续交付
探索云原生架构:构建现代应用的基石
【7月更文挑战第9天】本文深入探讨了云原生架构的核心概念、关键技术组件以及实施的最佳实践。通过分析云原生技术如何促进微服务架构的实现,容器化技术的利用,以及持续集成与持续部署(CI/CD)流程的自动化,本文旨在为读者提供一个全面的云原生技术框架视图,并揭示其在加速企业数字化转型过程中的关键作用。
|
5天前
|
边缘计算 人工智能 Cloud Native
云原生架构的演变与未来展望
在数字化转型的浪潮中,云原生技术成为企业IT战略的核心。本文深入探讨了云原生架构从起步到成熟的发展脉络,分析了容器化、微服务和持续交付等关键技术如何推动应用现代化,并预测了云原生技术的未来趋势,如边缘计算、AI增强和多云管理。同时,文章也对云原生实践过程中可能遇到的安全挑战、技术复杂性以及人才缺口问题提出了见解,旨在为读者提供一份全面的云原生技术指南。
|
1天前
|
运维 Cloud Native Devops
云原生架构的演进与实践
【7月更文挑战第14天】在数字化转型的浪潮中,云原生技术作为推动现代软件发展的新引擎,正引领着企业IT架构的变革。本文将探索云原生架构的核心概念、关键技术及其对企业IT策略的影响,同时通过案例分析,揭示云原生在实际应用中的成效与挑战,为读者呈现一幅云原生技术发展与应用的全景图。
14 4
|
2天前
|
Kubernetes 负载均衡 Cloud Native
云原生时代的微服务架构演进之路
【7月更文挑战第13天】本文深入探讨了在云原生环境下,微服务架构如何逐步演进以适应日益复杂的业务需求。从微服务的基本概念出发,到容器化技术的融合,再到服务网格的引入,文章详细阐述了微服务在不同阶段的技术挑战和解决方案。同时,通过案例分析,展示了企业如何实践微服务架构,以及在转型过程中可能遇到的技术和管理上的挑战。最终,文章对微服务架构的未来趋势进行了预测,指出了云原生技术如何继续推动微服务的革新。
|
3天前
|
Kubernetes Cloud Native Docker
云原生架构的演进:从容器化到服务网格
本文深入探讨了云原生技术从最初的容器化技术,如Docker和Kubernetes,发展到现代的服务网格架构,如Istio。文章将通过分析云原生技术的演进路径,揭示其在处理微服务复杂性、流量管理和安全性方面的优势。我们将通过具体案例展示服务网格如何优化分布式系统的性能,并预测未来云原生技术的发展趋势。
12 2
|
3天前
|
Cloud Native 安全 API
云原生架构在现代企业中的应用与挑战
随着云计算技术的飞速发展,云原生架构逐渐成为推动企业数字化转型的重要力量。本文深入探讨了云原生架构的核心组件、实施策略以及面临的主要挑战,旨在为读者提供一套系统的云原生应用框架和解决方案。通过分析多个行业案例,本文揭示了云原生技术如何助力企业提升业务灵活性、加快产品上市时间并优化资源管理。

推荐镜像

更多