Docker与Kubernetes自动化部署实践(入门级快速搭建)

496 阅读4分钟

前言

基于Docker和Kubernetes的自动化运维体系为企业带来了巨大的运维效率提升和成本节约。随着技术的不断进步,未来的运维工作将更加智能化、自动化,而掌握这些先进技术的运维人员将成为企业宝贵的资产。随着DevOps文化的普及和微服务架构的兴起,现代运维工作正面临着前所未有的挑战和机遇。在这样的背景下,容器化和微服务成为了解决复杂系统运维难题的关键技术。Docker作为容器化技术的先锋,提供了一种轻量级的、可移植的、自给自足的解决方案,而Kubernetes则以其强大的编排能力成为管理容器化应用的事实标准。

首先,让我们了解Docker的核心优势。Docker通过将应用程序及其依赖项打包到一个独立的容器中,实现了操作系统级别的虚拟化。这种隔离性保证了环境的一致性,无论应用在哪里运行,都能保持一致的行为。此外,Docker的镜像机制允许开发者轻松地在不同环境中迁移和部署应用,极大地简化了CI/CD流程。

然而,随着容器数量的增加,手动管理这些容器变得不再可行。这就是Kubernetes发挥作用的地方。Kubernetes是一个开源的容器编排平台,它允许用户声明性地定义应用的部署方式,自动化地完成应用的部署、扩缩容和管理。通过使用Kubernetes,运维团队可以专注于更高级别的任务,如策略制定和服务质量保证,而不是忙于处理基础设施的细节问题。

实践步骤

接下来,构建一个基于Docker和Kubernetes的自动化运维体系需要经过以下几个关键步骤:

  1. 搭建Docker环境,确保所有必要的依赖和网络配置都已就绪。
  2. 编写JAVA Web应用程序
  3. 应用容器化:将现有的应用转换为Docker容器,创建可重复使用的Docker镜像,并对镜像进行适当的版本控制。
  4. Kubernetes集群搭建并编写部署配置文件:为Kubernetes编写部署(Deployment)和服务(Service)配置文件,定义应用的运行方式、副本数量和访问策略。

1、环境准备:搭建Docker环境和Kubernetes集群

docker环境搭建

image.png

​ 官方地址:www.docker.com/

image.png ​ 官方文档地址:docs.docker.com/engine/inst…

image.png ​ 镜像安装包地址:hub.docker.com/

我现在用虚拟机演示docker环境搭建(新安装的CentOS 7,已配置好虚拟机的网络)

查看虚拟机的坏境

uname -r
3.10.0-1160.el7.x86_64

安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云docker-ce镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装必要的依赖包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

设置稳定版存储库

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装Docker CE

sudo yum install -y docker-ce

启动Docker服务 安装完成后,启动Docker服务并设置开机自启。

sudo systemctl start docker
sudo systemctl enable docker

验证Docker安装 使用以下命令验证Docker是否安装成功:

sudo docker --version

你应该会看到Docker的版本信息

2、编写JAVA Web应用

image.png

在org.example.yy.controller目录下创建一个新的Java类,如HelloController.java

package org.example.yy.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HellowordController {

    @GetMapping("/test")
    public String hello(){
        return "Hello World";
    }

}

3、应用容器化

1、编写DockerFile

FROM openjdk:17-jdk-slim COPY build/libs/SpringDockerWithKubernetes:jar:0.0.1-SNAPSHOT hello.jar ENTRYPOINT ["java","-jar","/hello.jar"]

2、构建Docker镜像

docker build -t hello:1.0

3、运行Docker容器

docker run -p 8888:8888 hello:1.0

然后,在浏览器中访问http://localhost:8888/test来测试 Docker是否启动完成。访问结果如下图:

image.png

4、Kubernetes集群搭建并编写部署配置文件

1. 启动 Kubernetes集群

使用minikube命令来启动和管理 Kubernetes 集群,安装和启动命令如下:

# 安装 minikube curl -Lo minikube 
https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 
chmod +x minikube sudo mv minikube /usr/local/bin/ 
# 启动 Kubernetes集群 
minikube start
2、 编写Kubernetes Deployment配置
apiVersion: apps/v1 # Kubernetes API版本
kind: Deployment    #声明Kubernetes源类型
metadata:
  name: hello     #通过metadata段中的各类信息来跟踪和管理资源
spec:
  replicas: 2       #Pod的副本数量
  selector:
    matchLabels:
      app: hello #告诉Deployment如何找到它管理的Pod
  template:
    metadata:
      labels:
        app: hello #定义Pod的模板
    spec:
      containers:
        - name: hello
          image: hello/hello:1.0 
          ports:
            - containerPort: 8888     #指定容器内部监听的应用端口
3、编写Kubernetes Service配置
apiVersion: v1.0
kind: Service 
metadata:
  name: hello
spec:
  type: LoadBalancer 
  ports:
    - port: 8888  
      targetPort: 8888 
  selector:
    app: hello
4、部署到Kubernetes

使用kubectl命令应用配置

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

通过上述步骤,我们不仅能够实现应用的快速部署和自动化管理,还能够提高系统的弹性和可维护性。

第一搭建环境踩太多的坑了,抽空玩了玩,新鲜的东西用于尝试,坚持就是胜利!!!