容器化-K8s-镜像仓库使用和应用

一、K8s 镜像仓库使用

1、启动镜像仓库

cd/usr/local/harbor
./install.sh

2、配置镜像仓库地址

在 master 节点和 slaver 节点上,需要配置 Docker 的镜像仓库地址,以便能够访问本地的镜像仓库。编辑 Docker 的配置文件 vi /etc/docker/daemon.json(如果不存在则创建),添加以下内容:

{
            
  "registry-mirrors": [
    "https://docker.211678.top",
    "https://docker.1panel.live",
    "https://hub.rat.dev",
    "https://docker.m.daocloud.io",
    "https://do.nark.eu.org",
    "https://dockerpull.com",
    "https://dockerproxy.cn",
    "https://docker.awsl9527.cn"],
  "insecure-registries":["192.168.142.168"]
}

保存文件后,重启 Docker 服务:

systemctl restart docker

3、K8s 登录镜像仓库

# 1、登录【创建秘钥】
kubectl create secret docker-registry rigistry --docker-server=192.168.142.168--docker-username=admin --docker-password=Harbor12345
# 2、设置仓库免秘钥【全局设置】
kubectl patch serviceaccount default-p '{"imagePullSecrets": [{"name": "rigistry"}]}'

如果镜像仓库不需要认证,可以省略用户名、密码和邮箱参数。

4、K8s 使用镜像仓库

部署webapi项目

# 1、运行
kubectl run harborwebapi --image=192.168.142.168/ydt_harbor/harborwebapi:latest

# 2、暴露【service】
kubectl expose pod harborwebapi --port=80 --target-port=80 --type=NodePort

部署nginx项目

# 1、运行
kubectl run customnginx --image=192.168.142.168/ydt_harbor/customnginx:latest

# 2、暴露【service】
kubectl expose pod customnginx --port=80 --target-port=80 --type=NodePort

二、K8s 应用

(一)Pod

基本作用​

最小部署单元: K8s 不直接管理容器,而是通过 Pod 管理一个或多个容器,是资源调度的最小单位。​

资源共享: Pod 内的容器共享网络命名空间(IP / 端口)、存储卷(Volume),实现高效协同运行。​

原子性调度: 确保多个关联容器始终部署在同一节点,保障应用的一致性和完整性。​

Pod 与容器的关系​
一个 Pod 通常包含1 个主容器(承载核心应用),也可包含多个辅助容器(如日志收集、配置代理等 Sidecar 容器)。​
容器在 Pod 内通过localhost直接通信,共享存储卷实现数据交互。​

为什么使用 Pod?​

简化管理: 将多个容器抽象为一个逻辑单元,避免单独管理每个容器的复杂操作。​

原子性需求: 部分应用需要多个容器紧密协作(如前端 + 后端 + 缓存),Pod 确保它们同生共死,部署在同一节点。​

K8s 调度要求: K8s 以 Pod 为单位进行调度,而非单个容器,Pod 提供了比容器更高层次的抽象。​

如何使用 Pod?​

命令行快速创建:​

kubectl run nginx-pod --image=nginx:1.21 --port=80​

YAML 文件定义(推荐生产环境使用):​

apiVersion: v1​
kind: Pod​
metadata:​
  name: nginx-pod​
  labels:​
    app: nginx​
spec:​
  containers:​
  - name: nginx-container​
    image: nginx:1.21​
    ports:​
    - containerPort: 80​
      protocol: TCP​
  # 可选:添加存储卷、环境变量等配置​
  volumes:​
  - name: data-volume​
    hostPath:​
      path: /data/nginx​
      type: DirectoryOrCreate​

查看与管理:​

kubectl get pods -o wide # 查看所有Pod及所在节点​
kubectl describe pod nginx-pod # 查看详细状态和事件​
kubectl delete pod nginx-pod # 删除Pod(K8s会自动重建,如需彻底删除需删除控制器)​

(二)Service​

基本作用​

服务发现: 为一组 Pod 提供固定访问入口,解决 Pod IP 动态变化问题(Pod 重启后 IP 会改变,Service 提供稳定的访问地址)。​
负载均衡: 将客户端请求均匀分发到多个 Pod 实例,避免单个 Pod 过载,提高应用可用性。​
跨 Namespace 通信: 通过 Service 域名(如webapi-service.default.svc.cluster.local)实现集群内服务间的透明调用。​

访问原理​

ClusterIP(默认类型): 在集群内部分配一个虚拟 IP,仅集群内节点和 Pod 可通过该 IP 访问服务,用于内部微服务通信。​
NodePort: 在每个节点上开放一个端口(30000-32767 范围),外部可通过节点IP:NodePort访问服务,适用于没有负载均衡器的环境。​
LoadBalancer(云环境): 调用云服务商的负载均衡器(如 AWS ELB、阿里云 SLB),自动分配公网 IP,适用于对外暴露服务。​

与 Pod 的关系​

标签选择器(Selector): Service 通过 Pod 的标签(如app: nginx)匹配目标 Pod,建立映射关系。​
端点控制器(Endpoints): K8s 自动维护与 Service 匹配的 Pod IP 列表,当 Pod 创建或删除时,Endpoints 会动态更新,确保流量始终路由到健康的 Pod。​

示例:创建 ClusterIP 类型 Service​

apiVersion: v1​
kind: Service​
metadata:​
  name: webapi-service​
spec:​
  type: ClusterIP​
  ports:​
  - name: http​
    port: 8080 # Service自身端口(集群内访问)​
    targetPort: 80 # Pod容器端口​
  selector:​
    app: webapi # 匹配具有该标签的Pod​

(三)Deployment​

作用​

副本管理: 确保指定数量的 Pod 副本始终运行,支持自动故障恢复(如 Pod 意外删除时自动重建)。​
滚动更新: 通过声明式配置实现应用版本的平滑升级,支持分批次替换旧 Pod,确保服务不中断。​
版本回滚: 如果更新过程中出现问题,可快速回滚到之前的任意历史版本,降低发布风险。​
状态监控: 实时显示部署状态(如当前运行副本数、更新进度、失败原因等),方便运维排查问题。​

基本使用​
创建 Deployment(通过 YAML 文件):​

apiVersion: apps/v1​
kind: Deployment​
metadata:​
  name: webapi-deployment​
spec:​
  replicas: 3 # 期望运行的Pod副本数​
  selector:​
    matchLabels:​
      app: webapi # 匹配Pod的标签​
  template:​
    metadata:​
      labels:​
        app: webapi # Pod的标签​
    spec:​
      containers:​
      - name: webapi-container​
        image: 192.168.142.129:5000/webapi-app:v1 # 镜像地址​
        ports:​
        - containerPort: 80 # 容器端口​
        resources: # 资源限制(可选)​
          requests:​
            cpu: 100m # 最小CPU资源(100m=0.1核)​
            memory: 128Mi # 最小内存​
          limits:​
            cpu: 200m # 最大CPU资源​
            memory: 256Mi # 最大内存​

应用配置:

kubectl apply -f deployment-webapi.yaml​

扩缩容操作:​

kubectl scale deployment webapi-deployment --replicas=5 # 扩展到5个副本​
kubectl scale deployment webapi-deployment --replicas=1 # 收缩到1个副本​

更新镜像版本:​

kubectl set image deployment webapi-deployment webapi-container=192.168.142.129:5000/webapi-app:v2 # 滚动更新镜像​
kubectl rollout status deployment webapi-deployment # 查看更新进度​

查看日志与事件​
查看 Pod 日志:​

kubectl logs <pod-name> # 查看单个Pod的最新日志​
kubectl logs -f <pod-name> # 实时跟踪日志输出(类似tail -f)​

查看 Deployment 事件:​

kubectl describe deployment webapi-deployment # 显示部署的详细信息,包括副本状态、更新历史、错误原因等​

版本回滚​

# 查看历史版本(显示revision号)​
kubectl rollout history deployment webapi-deployment​
​
# 回滚到指定版本(例如revision 2)​
kubectl rollout undo deployment webapi-deployment --to-revision=2​
​
# 回滚到上一个版本(无需指定revision)​
kubectl rollout undo deployment webapi-deployment​
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容