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
相关推荐
dayouziei2 小时前
java的类加载机制的学习
java·学习
昌sit!3 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习
A ?Charis6 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
晨曦_子画6 小时前
3种最难学习和最容易学习的 3 种编程语言
学习
城南vision6 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge6 小时前
Docker篇(Docker Compose)
运维·docker·容器
北漂IT民工_程序员_ZG7 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
ctrey_7 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习
十年之少7 小时前
由中文乱码引来的一系列学习——Qt
学习