k8s的简单使用

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

  1. 安装 kubectl

    • kubectl 是 Kubernetes 命令行工具,用于运行命令对 Kubernetes 集群进行操作。
    bash 复制代码
    curl -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
  2. 安装 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)。

  1. Nacos Server - 提供服务注册和配置管理。
  2. 服务提供者 (Provider) - 一个简单的 Spring Boot 应用,注册到 Nacos,提供 REST API。
  3. 服务消费者 (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 微服务的基本示例。这个配置适合在开发和测试环境中使用。对于生产环境,你可能需要考虑更多的安全设置、资源限制、持久化存储和高可用性配置。

相关推荐
梅孔立1 小时前
Docker 容器网络不通:Tomcat 无法解析 MySQL、Nginx 无法反代 Tomcat 的生产级排查与治理
网络·docker·tomcat
无言听风雨丶9 小时前
Kubernetes 控制平面深度剖析:从 kubectl apply 到 etcd 写入的全链路
平面·kubernetes·etcd
openFuyao10 小时前
openFuyao x 复旦大学软件工程实验室 Panel 回顾:Agentic时代,集群调度技术体系将如何演进?
kubernetes·openfuyao
螺蛳粉 螺蛳粉11 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
逃逸线LOF11 小时前
Ribbon负载均衡原理(Irule组件、源码分析)
后端·spring cloud·ribbon
相思难忘成疾14 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
PellyKoo14 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
时早玖沐14 小时前
放弃 QQ 官方机器人:用 SnowLuma + AstrBot 自建 QQ 机器人
docker·开源·agent
weirong15 小时前
给 K8s 加一个自动值班员:分级故障自愈引擎
kubernetes
云和数据.ChenGuang15 小时前
Python 闭包详解:从原理到实战
linux·开发语言·人工智能·python·kubernetes