当前位置: 首页 > article >正文

docker和k8s实践

Docker 和 Kubernetes 是现代云原生应用开发和运维中的两个重要技术。Docker 提供容器化技术,可以将应用及其依赖打包在容器中,而 Kubernetes 则负责容器的编排、部署、伸缩和管理。以下是 Docker 和 Kubernetes 的实践指南,涵盖基础安装、配置和常见操作。

1. Docker 实践

1.1 安装 Docker

在 Linux (例如 AlmaLinux) 上安装 Docker:

# 安装 Docker 的依赖包
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2

# 设置 Docker 仓库
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker Engine
sudo dnf install docker-ce docker-ce-cli containerd.io -y

# 启动并设置 Docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker
1.2 常用 Docker 命令
  • 查看 Docker 版本

    docker --version
    
  • 拉取镜像

    docker pull nginx:latest
    
  • 运行容器

    docker run -d --name my_nginx -p 8080:80 nginx
    
  • 查看运行中的容器

    docker ps
    
  • 停止容器

    docker stop my_nginx
    
  • 删除容器

    docker rm my_nginx
    
  • 构建 Docker 镜像
    创建 Dockerfile,例如:

    FROM nginx:latest
    COPY ./index.html /usr/share/nginx/html/index.html
    

    然后执行:

    docker build -t my_nginx_image .
    
1.3 Docker Compose

Docker Compose 是用于定义和运行多容器 Docker 应用的工具,可以通过 docker-compose.yml 文件来定义应用的服务、网络、卷等。

  • 安装 Docker Compose

    sudo dnf install docker-compose
    
  • 创建 docker-compose.yml 文件

    version: '3'
    services:
      web:
        image: nginx
        ports:
          - "8080:80"
    
  • 使用 Docker Compose 启动服务

    docker-compose up -d
    
  • 查看日志

    docker-compose logs
    
  • 停止服务

    docker-compose down
    

2. Kubernetes 实践

2.1 安装 Kubernetes

在 Linux 上安装 Kubernetes(以 AlmaLinux 为例):

  • 安装 Kubernetes 依赖

    sudo dnf install -y kubelet kubeadm kubectl
    
  • 启动 Kubernetes 服务

    sudo systemctl enable --now kubelet
    
  • 初始化 Kubernetes Master 节点

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    

    这将初始化 Kubernetes 集群,并返回一个命令,你需要在其他节点上使用该命令来加入集群。

  • 配置 kubectl 访问
    运行以下命令以使 kubectl 使用当前用户的权限访问集群:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
2.2 部署网络插件

Kubernetes 集群通常需要网络插件来提供 Pod 间的网络通信。常用的网络插件有 Flannel、Calico、Weave 等。

安装 Flannel 网络插件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.3 Kubernetes 常用命令
  • 查看集群节点

    kubectl get nodes
    
  • 查看 Pod 状态

    kubectl get pods
    
  • 创建 Deployment
    例如创建一个 Nginx 部署:

    kubectl create deployment nginx --image=nginx
    
  • 暴露服务
    创建一个 Service 来暴露部署的应用:

    kubectl expose deployment nginx --port=80 --type=NodePort
    
  • 查看暴露的服务

    kubectl get svc
    
  • 删除资源
    删除部署的服务和 Pod:

    kubectl delete deployment nginx
    kubectl delete svc nginx
    
2.4 Pod 和容器的管理
  • 查看 Pod 日志

    kubectl logs <pod_name>
    
  • 执行 Pod 内命令

    kubectl exec -it <pod_name> -- /bin/bash
    
2.5 部署 Helm

Helm 是 Kubernetes 的包管理工具,能够简化 Kubernetes 应用的安装和管理。

  • 安装 Helm

    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
    
  • 安装应用

    helm install my-release nginx
    
  • 查看已安装应用

    helm list
    

3. Docker 和 Kubernetes 集成实践

3.1 从 Docker 部署到 Kubernetes
  • 创建 Docker 镜像,并将其推送到 Docker Hub 或私有 Docker 仓库。

    假设已经有一个名为 myapp 的 Docker 镜像:

    docker tag myapp <your-docker-repo>/myapp:latest
    docker push <your-docker-repo>/myapp:latest
    
  • 在 Kubernetes 中创建 Deployment,通过定义一个 yaml 文件来部署应用:

    myapp-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: <your-docker-repo>/myapp:latest
            ports:
            - containerPort: 8080
    

    部署到 Kubernetes 集群:

    kubectl apply -f myapp-deployment.yaml
    
  • 暴露应用

    kubectl expose deployment myapp-deployment --type=LoadBalancer --name=myapp-service
    
3.2 使用 Jenkins 自动化 CI/CD

Jenkins 可以与 Docker 和 Kubernetes 集成,实现自动化构建、测试和部署。

  • 配置 Jenkins 安装 Docker 插件,以便 Jenkins 通过 Docker 来构建镜像。
  • 创建 Jenkins pipeline,定义 CI/CD 流程,将 Docker 镜像推送到 Docker 仓库并在 Kubernetes 上自动部署。

以下是一个简化的 Jenkins Pipeline 示例:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    dockerImage = docker.build("myapp:${env.BUILD_ID}")
                }
            }
        }
        stage('Push') {
            steps {
                script {
                    docker.withRegistry('https://mydockerhub.com', 'my-dockerhub-credentials') {
                        dockerImage.push()
                    }
                }
            }
        }
        stage('Deploy') {
            steps {
                script {
                    sh "kubectl apply -f myapp-deployment.yaml"
                    sh "kubectl expose deployment myapp-deployment --type=LoadBalancer --name=myapp-service"
                }
            }
        }
    }
}

通过此管道配置,Jenkins 将执行以下步骤:

  1. 构建 Docker 镜像
  2. 推送镜像到 Docker Hub
  3. 使用 kubectl 在 Kubernetes 集群中部署应用并暴露服务

4. 总结

  • Docker 提供了容器化功能,使得应用能够跨平台、跨环境地运行。
  • Kubernetes 提供容器编排功能,帮助你自动化容器的部署、扩展和管理。
  • Jenkins 可以与 Docker 和 Kubernetes 集成,实现自动化的持续集成和持续部署(CI/CD)流程。

通过结合 Docker、Kubernetes 和 Jenkins,你可以实现自动化的应用部署和更新,大大提高了开发和运维的效率。


http://www.kler.cn/a/460745.html

相关文章:

  • SOLIDWORKS Composer在产品设计、制造与销售中的应用
  • springboot集成阿里云短信服务
  • wangEditor/editor自定义粘贴后续
  • YOLO11改进 | 卷积模块 | ECCV2024 小波卷积
  • 迅为RK3568开发板编译Android12源码包-设置屏幕配置
  • Datawhale AI冬令营(第二期)动手学AI Agent--Task3:学Agent工作流搭建,创作进阶Agent
  • SAP PP CSAP_MAT_BOM_MAINTAIN BOM ECN 删除组件
  • docker-compos mysql5.7主从配置
  • Python入门:9.递归函数和高阶函数
  • 2020最新整理版SpringBoot 面试题
  • 【C++】2029:【例4.15】水仙花数
  • Python列表推导常见问题解析:高效编程的陷阱与避坑指南
  • DeepSeek V3“报错家门”:我是ChatGPT
  • 【brew安装失败】DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0
  • 电子电气架构 --- 汽车电子电器设计概述
  • 用Pyside6 和sqlite3 重写了《电脑装配单》 加入切换主题 样式
  • 构建一个rust生产应用读书笔记7-确认邮件3
  • 【信息系统项目管理师】高分论文:论信息系统项目的沟通管理(不动产登记系统)
  • Python世界:人生苦短,我用Python
  • 一文讲清楚CSS3新特性
  • Hessian 矩阵与函数的凸性
  • 网络渗透测试实验二:网络嗅探与身份认证
  • 从零到一:构建高效、安全的电商数据API接口
  • Leetcode 从中序与后序遍历序列构造二叉树
  • Rocky Linux 下安装Liboffice
  • 计算机网络 (17)点对点协议PPP