k8s是Kubernetes的简称,是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。Kubernetes提供了一个框架来运行分布式系统的应用程序,它使得部署和运维服务变得更加容易,并能够在物理或虚拟机上运行跨集群的服务。
Kubernetes的主要特点包括:
- 自动装箱:自动放置容器基于资源需求和其他限制,而无需牺牲可用性。
- 自我修复:当容器失败时,它会重启替换容器,杀死不响应用户定义的健康检查的容器,并且在节点不可用时会重新调度那些节点的容器。
- 水平扩展:通过简单的命令、用户界面,或根据 CPU 使用情况等指标自动扩展应用副本数量。
- 服务发现和负载均衡:不需要修改应用程序的情况下就可以使用 Kubernetes 的服务发现机制。
- 自动发布和回滚:可以逐步推出对应用或其配置的改变,以便在问题出现时可以自动回滚。
Kubernetes 支持多种容器运行时,例如 Docker 和 containerd。它非常适合用于微服务架构的部署和管理。
搭建 Kubernetes (k8s) 集群
搭建 Kubernetes (k8s) 集群可以通过多种方式进行,包括使用 Minikube(适合本地开发和测试)、kubeadm(适合生产环境)、云服务提供商的 Kubernetes 服务(如 Amazon EKS、Google GKE、Microsoft AKS 等),或其他工具如 Rancher、OpenShift 等。在这里,我将详细介绍使用 Minikube 和 kubeadm 两种常见方式来搭建 Kubernetes 集群。
1. 使用 Minikube 搭建 Kubernetes
Minikube 是一个轻量级的 Kubernetes 实现,它将 Kubernetes 集群部署在本地计算机的虚拟机中,非常适合学习和开发目的。
步骤 1: 安装 Minikube
-
安装 kubectl
kubectl
是 Kubernetes 命令行工具,用于运行命令对 Kubernetes 集群进行操作。
bashcurl -LO "https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl" chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl
-
安装 Minikube
- 访问 Minikube 的官方安装指南下载适合你操作系统的 Minikube 安装程序。
步骤 2: 启动 Minikube
bash
minikube start
步骤 3: 验证集群状态
bash
kubectl get nodes
2. 使用 kubeadm 搭建 Kubernetes
kubeadm 是一个官方工具,用于快速部署 Kubernetes 集群。
前提条件
- 至少两台机器(一台作为 Master 节点,至少一台作为 Worker 节点)
- 每台机器至少 2GB 的 RAM(建议更多)
- 网络配置允许各个节点之间通信
步骤 1: 安装 kubeadm, kubelet, 和 kubectl
在所有节点上执行:
bash
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
步骤 2: 初始化 Kubernetes Master
在 Master 节点上执行:
bash
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
- 记录下
kubeadm join
命令输出,这是 Worker 节点加入集群所需的。
步骤 3: 设置 kubectl
在 Master 节点上执行:
bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
步骤 4: 安装 Pod 网络插件
选择一个网络插件(如 Calico、Flannel 等)并在 Master 节点上安装:
bash
kubectl apply -f [网络插件的 YAML 文件 URL]
步骤 5: 加入 Worker 节点
在每个 Worker 节点上执行步骤 2 中记录的 kubeadm join
命令。
步骤 6: 验证集群状态
在 Master 节点上执行:
bash
kubectl get nodes
以上步骤分别概述了使用 Minikube 和 kubeadm 创建 Kubernetes 集群的过程。这两种方式分别适用于不同的应用场景,Minikube 更适合个人学习和开发测试,而 kubeadm 更适合生产环境的部署。
Kubernetes (k8s) 和 Docker 部署 Java Spring Cloud Alibaba 微服务
场景描述
在这个场景中,我们会使用 Spring Cloud Alibaba 的几个关键组件,包括 Nacos(服务发现和配置管理)和 Sentinel(服务容错管理)。我们的微服务架构将包括一个 Nacos 服务器、一个简单的 Spring Boot 应用作为服务提供者(Provider),以及一个消费这些服务的服务消费者(Consumer)。
- Nacos Server - 提供服务注册和配置管理。
- 服务提供者 (Provider) - 一个简单的 Spring Boot 应用,注册到 Nacos,提供 REST API。
- 服务消费者 (Consumer) - 一个 Spring Boot 应用,从 Nacos 发现服务提供者并调用其 API。
Docker 化应用
首先,每个组件都需要有一个 Dockerfile
来构建 Docker 镜像。
Dockerfile 示例 (对于 Provider)
dockerfile
# Dockerfile for Service Provider
FROM openjdk:11-jdk
VOLUME /tmp
ADD build/libs/provider-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.cloud.nacos.discovery.server-addr=nacos-server:8848","-jar","/app.jar"]
同样的方法可以应用于 Consumer 和其他任何 Spring Boot 应用。
Kubernetes 配置
Nacos Server 部署 (nacos-deployment.yaml)
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nacos-server
spec:
replicas: 1
selector:
matchLabels:
app: nacos-server
template:
metadata:
labels:
app: nacos-server
spec:
containers:
- name: nacos-server
image: nacos/nacos-server:latest
ports:
- containerPort: 8848
Nacos Server 服务 (nacos-service.yaml)
yaml
apiVersion: v1
kind: Service
metadata:
name: nacos-server
spec:
ports:
- port: 8848
targetPort: 8848
selector:
app: nacos-server
Provider 和 Consumer 的部署及服务配置类似,需要调整应用名称、端口和 Docker 镜像名称。
使用 Minikube 或其他 Kubernetes 集群部署
部署到 Kubernetes 集群,确保你的 Docker 环境配置正确,并且 Kubernetes 集群正在运行。
bash
# 创建 Docker 镜像
docker build -t provider:latest -f Dockerfile-provider .
# 使用 kubectl 应用 Kubernetes 配置
kubectl apply -f nacos-deployment.yaml
kubectl apply -f nacos-service.yaml
# 相同步骤应用于 Provider 和 Consumer
验证部署
部署完成后,可以通过检查 pod 状态和服务状态来验证部署:
bash
kubectl get pods
kubectl get services
以上就是使用 Kubernetes 和 Docker 部署 Spring Cloud Alibaba 微服务的基本示例。这个配置适合在开发和测试环境中使用。对于生产环境,你可能需要考虑更多的安全设置、资源限制、持久化存储和高可用性配置。