前言
基于Docker和Kubernetes的自动化运维体系为企业带来了巨大的运维效率提升和成本节约。随着技术的不断进步,未来的运维工作将更加智能化、自动化,而掌握这些先进技术的运维人员将成为企业宝贵的资产。随着DevOps文化的普及和微服务架构的兴起,现代运维工作正面临着前所未有的挑战和机遇。在这样的背景下,容器化和微服务成为了解决复杂系统运维难题的关键技术。Docker作为容器化技术的先锋,提供了一种轻量级的、可移植的、自给自足的解决方案,而Kubernetes则以其强大的编排能力成为管理容器化应用的事实标准。
首先,让我们了解Docker的核心优势。Docker通过将应用程序及其依赖项打包到一个独立的容器中,实现了操作系统级别的虚拟化。这种隔离性保证了环境的一致性,无论应用在哪里运行,都能保持一致的行为。此外,Docker的镜像机制允许开发者轻松地在不同环境中迁移和部署应用,极大地简化了CI/CD流程。
然而,随着容器数量的增加,手动管理这些容器变得不再可行。这就是Kubernetes发挥作用的地方。Kubernetes是一个开源的容器编排平台,它允许用户声明性地定义应用的部署方式,自动化地完成应用的部署、扩缩容和管理。通过使用Kubernetes,运维团队可以专注于更高级别的任务,如策略制定和服务质量保证,而不是忙于处理基础设施的细节问题。
实践步骤
接下来,构建一个基于Docker和Kubernetes的自动化运维体系需要经过以下几个关键步骤:
- 搭建Docker环境,确保所有必要的依赖和网络配置都已就绪。
- 编写JAVA Web应用程序
- 应用容器化:将现有的应用转换为Docker容器,创建可重复使用的Docker镜像,并对镜像进行适当的版本控制。
- Kubernetes集群搭建并编写部署配置文件:为Kubernetes编写部署(Deployment)和服务(Service)配置文件,定义应用的运行方式、副本数量和访问策略。
1、环境准备:搭建Docker环境和Kubernetes集群
docker环境搭建
官方地址:www.docker.com/
官方文档地址:docs.docker.com/engine/inst…
镜像安装包地址: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应用
在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是否启动完成。访问结果如下图:
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
通过上述步骤,我们不仅能够实现应用的快速部署和自动化管理,还能够提高系统的弹性和可维护性。
第一搭建环境踩太多的坑了,抽空玩了玩,新鲜的东西用于尝试,坚持就是胜利!!!