Kubernetes 学习记录

https://note.youdao.com/ynoteshare/index.html?id=bc7bee305611b52d6900ba209a92bd4d\&type=note\&_time=1694072007342

概览

K8S官网文档:https://kubernetes.io/zh/docs/home/

K8S 是Kubernetes的全称,源于希腊语,意为"舵手"或"飞行员",官方称其是:用于自动部署、扩展和管理"容器化(containerized)应用程序"的开源系统。翻译成大白话就是:"K8S 是负责自动化运维管理多个跨机器 Docker 程序的集群"。

K8S核心特性

  • 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。
  • 存储编排:自动挂载所选存储系统,包括本地存储。
  • Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。
  • 批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。
  • 水平扩缩:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩。
  • 自动化上线和回滚:Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。
  • 自动装箱:根据资源需求和其他约束自动放置容器,同时避免影响可用性。
  • 自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。

K8S 快速实战

kubectl命令使用

kubectl是apiserver的客户端工具,工作在命令行下,能够连接apiserver实现各种增删改查等操作

kubectl官方使用文档:https://kubernetes.io/zh/docs/reference/kubectl/overview/

Namespace

K8s 中,命名空间(Namespace) 提供一种机制,将同一集群中的资源划分为相互隔离的组。同一命名空间内的资源名称要唯一,命名空间是用来隔离资源的,不隔离网络。

Kubernetes 启动时会创建四个初始命名空间:

  • default
    Kubernetes 包含这个命名空间,以便于你无需创建新的命名空间即可开始使用新集群。
  • kube-node-lease
    该命名空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送心跳, 由此控制面能够检测到节点故障。
  • kube-public
    所有的客户端(包括未经身份验证的客户端)都可以读取该命名空间。 该命名空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读。 该命名空间的公共属性只是一种约定而非要求。
  • kube-system
    该命名空间用于 Kubernetes 系统创建的对象。
bash 复制代码
# 查看namespace、
kubectl get namespace
#查看kube-system下的pod
kubectl get pods -n kube-system
#查看所有namespace下的pod
kubectl get pods -A

创建Namesapce示例

  • 命令行方式
    可以使用下面的命令创建Namespace:
bash 复制代码
kubectl create namespace tuling
  • yaml方式

新建一个名为 my-namespace.yaml 的 YAML 文件,并写入下列内容:

bash 复制代码
apiVersion: v1
kind: Namespace
metadata:
  name: yuyang

然后运行:

bash 复制代码
kubectl apply -f my-namespace.yaml

删除namesapce

bash 复制代码
kubectl delete namespace yuyang

kubectl delete -f my-namespace.yaml

Pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个)容器 ; 这些容器共享存储、网络、以及怎样运行这些容器的声明。

创建Pod示例:运行一个NGINX容器

  • 命令行方式
bash 复制代码
# 创建pod
kubectl run mynginx --image=nginx:1.14.2

#在指定命名空间创建pod
kubectl run mynginx --image=nginx:1.14.2 -n  <namespace>
kubectl run mynginx --image=nginx:1.14.2 -n  yuyang #例子
bash 复制代码
# 获取pod的信息,-owide 表示更详细的显示信息  -n 命名空间 查询对应namespace下的pod
kubectl get pod
kubectl get pod -owide
kubectl get pod -owide -n <namespace-name>

#查看pod的详情
kubectl describe pod <pod-name>
kubectl describe pod <pod-name>  -n  <namespace-name>

# 查看Pod的运行日志
kubectl logs <pod-name>

# 删除pod
kubectl delete pod <pod-name>

kubectl describe pod

  • yaml方式
bash 复制代码
#vim nginx-pod.yaml

apiVersion: v1   #版本
kind: Pod    #类型
metadata:   #以上是默认格式
  labels:
    run: mynginx   #标签别名
  name: mynginx   #pod名字
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2  #无版本号则拉取最新的
    ports:
    - containerPort: 80  

然后运行:

bash 复制代码
kubectl apply -f  nginx-pod.yaml

删除pod

bash 复制代码
kubectl delete -f  nginx-pod.yaml

一个pod运行多个容器

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: myapp
  name: myapp
spec:
  containers:
  - image: nginx:1.14.2
    name: nginx
  - image: tomcat:9.0.55
相关推荐
小小洋洋39 分钟前
BLE MESH学习1-基于沁恒CH582学习
学习
福大大架构师每日一题1 小时前
22.1 k8s不同role级别的服务发现
容器·kubernetes·服务发现
莹雨潇潇1 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
weixin_453965002 小时前
[单master节点k8s部署]30.ceph分布式存储(一)
分布式·ceph·kubernetes
weixin_453965002 小时前
[单master节点k8s部署]32.ceph分布式存储(三)
分布式·ceph·kubernetes
Ace'2 小时前
每日一题&&学习笔记
笔记·学习
tangdou3690986552 小时前
1分钟搞懂K8S中的NodeSelector
云原生·容器·kubernetes
IM_DALLA2 小时前
【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL25
学习·fpga开发·verilog学习
丶Darling.2 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
z樾4 小时前
Github界面学习
学习