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

K3S 全面解析

一、基础知识

1.1 K3S 简介

K3S 是一个轻量级的 Kubernetes 发行版,由 Rancher Labs 开发,旨在简化 Kubernetes 的部署和管理。它专为边缘计算、IoT 和开发环境设计,资源占用小且易于安装。

1.2 K3S 与传统 Kubernetes 的区别
  • 资源占用:K3S 在内存和CPU使用上更为高效,适合资源受限的环境。
  • 组件精简:K3S 移除了不必要的组件,如附加的存储和网络插件,简化了系统架构。
  • 简单安装:只需一个命令即可安装,自动处理依赖项和配置。
  • 高可用性支持:内置高可用性支持,通过外部数据库(如 SQLite)管理集群状态。
1.3 K3S 主要组件
  • Kubelet:负责节点上容器的运行和管理。
  • Kube-API Server:提供 Kubernetes API 接口,处理所有请求。
  • Kube-Controller-Manager:管理控制循环的控制器。
  • Kube-Scheduler:负责调度容器到各个节点。
  • Containerd:用于运行容器的容器运行时。

二、安装与配置

2.1 K3S 安装步骤

在不同环境(如本地开发、云服务)中安装 K3S 的步骤略有不同。以下是一个简单的安装步骤:

在 Linux 上安装 K3S

  1. 使用 curl 安装:

    curl -sfL https://get.k3s.io | sh -
    
  2. 检查安装状态:

    sudo k3s kubectl get nodes
    
2.2 K3S 配置

K3S 的配置文件通常位于 /etc/rancher/k3s/k3s.yaml。可以通过编辑该文件来调整资源限制、网络设置等。

示例

apiVersion: v1
kind: Config
clusters:
- cluster:
    server: https://<server-ip>:6443
  name: k3s
contexts:
- context:
    cluster: k3s
    user: admin
  name: k3s
current-context: k3s
users:
- name: admin
  user:
    token: <your-token>
2.3 常见安装问题
  • 问题:安装后无法访问 API 服务器。 解决:检查防火墙设置,确保端口开放。
  • 问题:节点未能加入集群。 解决:确保网络连接正常,并检查 K3S 服务状态。

三、集群管理

3.1 创建和管理 K3S 集群

使用以下命令可以创建和管理 K3S 集群:

k3s server &

可以通过 kubectl 命令进行管理,例如查看节点状态:

kubectl get nodes
3.2 添加和移除节点

添加节点

  1. 在主节点上获取 token:

    cat /var/lib/rancher/k3s/server/node-token
    
  2. 在新节点上运行:

    curl -sfL https://get.k3s.io | K3S_TOKEN=<your-token> sh -
    

移除节点: 使用 kubectl delete node 命令将节点移除。

3.3 高可用集群

K3S 支持高可用配置,可以使用 external datastore(如 etcd 或 MySQL)来实现:

k3s server --datastore-endpoint=<db-connection-string>

四、应用部署与管理

4.1 部署 Java 应用

在 K3S 上部署 Java 应用通常需要编写 Kubernetes YAML 配置文件,包括 Deployment 和 Service。

示例 YAML 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: java-app
  template:
    metadata:
      labels:
        app: java-app
    spec:
      containers:
      - name: java-app
        image: your-java-app-image
        ports:
        - containerPort: 8080
4.2 扩缩容操作

可以通过调整 Deployment 的 replicas 属性来进行扩缩容:

kubectl scale deployment java-app --replicas=3
4.3 监控和管理应用

使用 kubectl get pods 查看应用状态,使用 kubectl logs 查看日志。

五、与其他技术的集成

5.1 K3S 与其他工具集成

K3S 的轻量级特性使其易于与多种 CI/CD 工具集成,从而提升开发和部署效率。以下是与常见 CI/CD 工具的集成示例:

1. K3S 与 Jenkins 集成

  • 安装 Jenkins: 可以在 K3S 上通过 Helm 安装 Jenkins。

    helm repo add jenkins https://charts.jenkins.io
    helm install jenkins jenkins/jenkins
    
  • 配置 Jenkins Pipeline: 在 Jenkins 中配置一个 Pipeline,使用 kubectl 命令部署应用:

    pipeline {
        agent any
        stages {
            stage('Deploy') {
                steps {
                    sh 'kubectl apply -f deployment.yaml'
                }
            }
        }
    }
    
  • 使用 Jenkins Credentials: 在 Jenkins 中配置 K3S 的访问凭证,以便安全地访问 Kubernetes 集群。

2. K3S 与 GitLab CI 集成

  • 配置 GitLab Runner: 在 K3S 上安装 GitLab Runner,使其可以运行 CI/CD 作业。

  • .gitlab-ci.yml 示例

    stages:
      - deploy
    
    deploy:
      stage: deploy
      script:
        - kubectl apply -f deployment.yaml
    

通过与 CI/CD 工具的集成,K3S 可以实现自动化部署、回滚等操作,从而提高团队的开发效率和部署可靠性。

5.2 K3S 与 Java 技术栈的集成

K3S 可以轻松与 Java 技术栈(如 Spring Boot)集成,以支持现代微服务架构。以下是与 Spring Boot 的集成示例:

1. Spring Boot 应用的容器化

  • Dockerfile 示例

    FROM openjdk:11-jre
    COPY target/myapp.jar /app.jar
    ENTRYPOINT ["java", "-jar", "/app.jar"]
    
  • 构建 Docker 镜像

    docker build -t myapp:latest .
    

2. 在 K3S 中部署 Spring Boot 应用

  • Kubernetes Deployment YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: myapp:latest
            ports:
            - containerPort: 8080
    
  • 创建服务以暴露应用

    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-service
    spec:
      type: ClusterIP
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: myapp
    

3. 与其他服务的通信

  • 可以通过 Spring Boot 的 RestTemplate 或 WebClient 访问 K3S 中的其他服务。配置 Kubernetes DNS 服务以简化服务间的通信。

示例代码

@RestController
public class MyController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/callOtherService")
    public String callOtherService() {
        String response = restTemplate.getForObject("http://other-service/api", String.class);
        return response;
    }
}

通过与 Java 技术栈的集成,K3S 提供了一个高效、灵活的环境,使开发人员能够快速构建和部署微服务应用。


六、安全性

6.1 K3S 安全措施

K3S 提供多种安全措施,确保集群和应用的安全性:

1. RBAC(角色访问控制)

  • K3S 使用 RBAC 来管理集群中的用户和服务的权限。
  • 可以通过 YAML 文件定义角色和角色绑定,限制对资源的访问。

示例

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: myapp-role
rules:
- apiGroups: ["*"]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: myapp-role-binding
  namespace: default
subjects:
- kind: User
  name: myuser
roleRef:
  kind: Role
  name: myapp-role
  apiGroup: rbac.authorization.k8s.io

2. 网络策略

  • K3S 支持网络策略,可以控制 pod 之间的通信。
  • 通过定义网络策略,限制哪些 pod 可以访问其他 pod。

示例

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-app
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: myapp
6.2 部署应用的安全性

在 K3S 中部署应用时,确保采用以下安全措施:

1. 使用 HTTPS

  • 确保所有的服务和 API 端点都通过 HTTPS 进行通信,防止中间人攻击。

2. 身份验证和授权

  • 使用 OAuth2、JWT 或其他身份验证机制保护 API 端点。

3. 定期更新

  • 定期更新 K3S 和所有运行的应用,及时修补安全漏洞。

4. 监控和日志记录

  • 使用监控工具(如 Prometheus、Grafana)和日志管理工具(如 ELK Stack)跟踪应用的运行状态,及时发现异常行为。

通过实施这些安全措施,可以显著提高在 K3S 上部署的应用的安全性。


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

相关文章:

  • docker安装低版本的jenkins-2.346.3,在线安装对应版本插件失败的解决方法
  • nginx代理云数据库链接实现办公室内网访问云上内网数据库
  • 什么是 OpenTelemetry?
  • ubuntu unrar解压 中文文件名异常问题解决
  • 人脑与机器连接:神经科技的伦理边界探讨
  • 自扶正救生艇,保障水上救援的安全卫士_鼎跃安全
  • 从0开始本地部署大模型
  • MyBatis-Plus条件构造器:构建安全、高效的数据库查询
  • NVR小程序接入平台/设备EasyNVR多个NVR同时管理视频监控新选择
  • C语言中的快速排序
  • DNA、蛋白质、生物语义语言模型的介绍
  • ARM cpu算力KDMIPS测试
  • 用 Ray 扩展 AI 应用
  • Django+Vue全栈开发旅游网项目景点详情
  • Linux系统-僵尸孤儿进程
  • Android平台RTSP转RTMP推送之采集麦克风音频转发
  • 【C++】多态的语法与底层原理
  • MATLAB算法实战应用案例精讲-【数模应用】PageRank(附MATLAB、C++、python和R语言代码实现)
  • 《Java 实现快速排序:原理剖析与代码详解》
  • thinkphp中命令行工具think使用,可用于快速生成控制器,模型,中间件等
  • 智源推出小时级超长视频理解大模型Video-XL
  • MVC(Model-View-Controller)模式概述
  • 【WPF】深入理解并发、并行、单线程、多线程、同步、异步概念
  • __attribute__ ((__packed__))
  • 计算机网络:网络层 —— 路由信息协议 RIP
  • 智驭模板引擎管理系统(SmartTemplate Manager)