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
相关推荐
CCCC131016310 分钟前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9361 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头1 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑2 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA3 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
40kuai3 小时前
kubernetes中数据存储etcd
容器·kubernetes·etcd
杜子不疼.3 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖4 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨4 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
myzzb4 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa