Kubernetes入门学习
Kubernetes入门学习
Kubernetes简介
Kubernetes(简称K8s)是Google开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了一个可移植、可扩展的开源平台来管理容器化的工作负载和服务。
k8s 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由 Google 开发,现由 Cloud Native Computing Foundation(CNCF)维护。k8s 的目标是简化应用程序的部署和管理,提供弹性、可扩展、高可用的服务。
Kubernetes 以容器技术(例如 Docker)作为应用的基础构建单元。容器作为一种轻量级的虚拟化方案,能够将应用及其运行依赖打包至一个独立、可移植的运行环境中。借助容器技术,开发人员可以实现应用与底层运行环境的隔离,并达成快速部署与跨平台运行的目标。
Kubernetes 提供了一系列完善的功能,用于支撑容器化应用的全生命周期管理。其核心组件与概念包括:
Pod:作为 Kubernetes 中最小的调度单元,Pod 可封装一个或多个容器,这些容器共享网络和存储资源。Pod 为内部容器间的通信与协同工作提供了运行环境。
Deployment:用于定义应用的目标状态,并负责维护和管理 Pod 的多个副本。它支持滚动升级、版本回退以及根据负载自动扩缩容等运维操作。
Service:为一组 Pod 提供稳定的访问入口及网络策略定义。Service 可通过负载均衡机制,将外部请求分发至所属的多个 Pod 实例。
Namespace:通过逻辑隔离的方式将集群资源划分为多个虚拟集群。不同的命名空间可设置独立的资源配额与访问权限控制。
Volume:提供数据持久化存储的抽象层,支持在多个 Pod 之间共享数据或实现数据的持久化保存。Kubernetes 兼容多种存储类型,包括本地存储和网络存储等。
核心概念
namespace
关键命令为:
#获取所有ns
kubectl get ns#创建ns
kubectl create ns ns名称#删除ns
kubectl delete ns ns名称
Pod
Pod是Kubernetes中最小的可部署单元,包含一个或多个容器。
apiVersion: v1
kind: Pod
metadata:name: nginx-podlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.21ports:- containerPort: 80
关键命令为:
# 创建Pod
kubectl apply -f pod.yaml# 查看所有Pod
kubectl get pods# 查看特定命名空间的Pod
kubectl get pods -n kube-system# 查看Pod详细信息
kubectl describe pod <pod-name># 查看Pod日志
kubectl logs <pod-name># 查看Pod IP
kubectl get pod -o wide# 实时查看日志
kubectl logs -f <pod-name># 进入Pod容器
kubectl exec -it <pod-name> -- /bin/bash # windows desktop进入Pod容器
kubectl exec -it <pod-name> -- bash # 删除Pod
kubectl delete pod <pod-name>
Deployment
Deployment为Pod和ReplicaSet提供声明式更新。
my-deploy.yaml文件内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcat-deploylabels:run: tomcat-deploy
spec:replicas: 2selector:matchLabels:app: tomcat-deploytemplate:metadata:labels:app: tomcat-deployspec:containers:- image: tomcat:8.5.92name: tomcat
关键命令为:
# 命令行创建
kubectl create deployment tomcat --image=tomcat:8.5.92# yaml格式创建
kubectl apply -f my-deploy.yaml# 查看deploy
kubectl get deploy
依次运行命令如下:

Service
Service定义了一种访问Pod的方式,提供稳定的网络端点。
my-service.yaml文件如下:
apiVersion: v1
kind: Service
metadata: name: my-service
spec:selector:app: tomcat-deploy # 需要与deployment的标签匹配ports:- protocol: TCPport: 8080targetPort: 8080type: NodePort
关键命令为:
# 查看所有Service
kubectl get services# 查看Service详细信息
kubectl describe service <service-name># 暴露Deployment为Service
kubectl expose deployment <deployment-name> --type=NodePort --port=80# 删除svc
kubectl delete svc svc-name
依次运行命令如下:
8080为集群内部访问端口,30596为外部访问端口, type: NodePort时外部环境才可以访问

ConfigMap
在 k8s 中,ConfigMap 是一种用于存储应用程序配置数据的对象。它允许将配置信息与应用程序分离,从而实现配置的解耦和管理的集中化。ConfigMap 是以键值对的形式存储配置数据的,可以包含一个或多个键值对。这些配置数据可以包含环境变量、命令行参数、配置文件等。ConfigMap 的数据可以通过环境变量、命令行参数或挂载文件的方式注入到 Pod 中的容器中。ConfigMap 可以通过 kubectl 命令行工具、YAML 文件或 API 进行创建和管理。可以在命名空间级别或集群级别创建 ConfigMap,并将其应用于特定的 Pod、Deployment、StatefulSet 等对象。
my-redis.conf 文件内容如下:
appendonly yes
requirepass 123456
依次运行命令如下:
# 创建ConfigMap
kubectl create cm redis-configmap --from-file = my-redis.conf# 查看cm
kubectl get cm

redis-cm.yaml 文件如下:
apiVersion: v1
kind: Pod
metadata:name: redis-configmap
spec:containers:- name: redis02image: redis:7.0.15command:- redis-server- "/redis-master/redis.conf"ports:- containerPort: 6379volumeMounts:- mountPath: /dataname: redis-data- mountPath: /redis-mastername: configvolumes:- name: redis-dataemptyDir: {}- name: configconfigMap:name: redis-cmitems:- key: my-redis.confpath: redis.conf
依次运行命令如下:

进入容器内部,查看redis.conf文件内容:

注意: 在基于windows desktop 拉取镜像有时候拉取失败,可以更换镜像源如下:
{"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://ml91x5p1.mirror.aliyuncs.com"]
}
参考学习文章: k8s参考文章1
