使用Kubernetes管理容器化应用

使用Kubernetes管理容器化应用

      • Kubernetes简介
      • 安装Kubernetes
        • 安装Minikube
        • 启动Minikube集群
      • 创建一个简单的Web应用
        • 创建项目目录
        • 初始化项目
        • 安装Node.js依赖
      • 创建Docker镜像
        • 编写Dockerfile
        • 构建并推送Docker镜像
      • 创建Kubernetes配置文件
        • 创建Deployment
        • 创建Service
      • 应用Kubernetes配置
      • 验证部署
      • 使用Helm简化部署
        • 安装Helm
        • 创建Chart
        • 安装Chart
      • 使用Dashboard
        • 启动Dashboard
      • 总结

Kubernetes(简称K8s)是目前最流行的容器编排工具之一,它可以帮助用户自动部署、扩展和管理容器化应用。本文将详细介绍如何使用Kubernetes来管理一个简单的容器化应用。

Kubernetes简介

Kubernetes是一个开源平台,最初由Google设计并贡献给社区,旨在简化容器化应用的部署和管理。Kubernetes可以自动调度容器到集群中的节点,并且能够保证容器按照预期的方式运行。

安装Kubernetes

在开始之前,你需要有一个Kubernetes集群。如果你没有现成的集群,可以使用Minikube在本地环境中创建一个。

安装Minikube
访问Minikube的官方文档(https://minikube.sigs.k8s.io/docs/start/),根据你的操作系统安装Minikube。

启动Minikube集群
使用以下命令启动一个Minikube集群。

minikube start

创建一个简单的Web应用

为了演示Kubernetes的工作方式,我们将创建一个简单的Web应用。

创建项目目录
在你的机器上创建一个新的目录,并进入该目录。

mkdir k8s-demo && cd k8s-demo

初始化项目
我们将使用一个简单的Node.js应用作为例子。

cat > app.js <<EOF
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello Kubernetes!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
EOF

安装Node.js依赖
安装必要的Node.js依赖。

npm init -y
npm install express

创建Docker镜像

为了让应用能够在Kubernetes中运行,我们需要将其容器化。

编写Dockerfile
创建一个Dockerfile,用于构建容器镜像。

FROM node:14-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

构建并推送Docker镜像
构建并推送镜像到Docker Hub或私有仓库。

docker build -t k8s-demo .
docker push k8s-demo

创建Kubernetes配置文件

为了让Kubernetes知道如何部署和管理我们的应用,我们需要创建几个配置文件。

创建Deployment
创建一个名为 deployment.yaml的文件,定义应用的部署规则。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: k8s-demo
  template:
    metadata:
      labels:
        app: k8s-demo
    spec:
      containers:
      - name: k8s-demo
        image: k8s-demo
        ports:
        - containerPort: 3000

创建Service
创建一个名为 service.yaml的文件,定义应用的服务暴露规则。

apiVersion: v1
kind: Service
metadata:
  name: k8s-demo
spec:
  selector:
    app: k8s-demo
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
  type: NodePort

应用Kubernetes配置

使用 kubectl命令行工具来应用配置文件。

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

验证部署

等待几分钟,让Kubernetes集群处理你的请求。

kubectl get pods
kubectl get svc

一旦Pods和Services处于运行状态,你就可以通过服务的NodePort来访问应用。

minikube service k8s-demo --url

Kubernetes集群中的Pods和服务

使用Helm简化部署

Helm是一个Kubernetes的应用包管理器,类似于APT或YUM。

安装Helm
访问Helm的官方文档(https://helm.sh/docs/intro/install/),根据你的操作系统安装Helm。

创建Chart
创建一个Chart文件夹,并填充必要的文件。

helm create k8s-demo-chart
cd k8s-demo-chart

安装Chart
使用Helm安装Chart。

helm install k8s-demo-release .

使用Dashboard

Kubernetes Dashboard是一个用户界面,可以用来管理集群中的资源。

启动Dashboard
使用 kubectl启动Dashboard。

kubectl proxy

然后访问http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/来打开Dashboard。

使用Kubernetes Dashboard管理集群

总结

通过本文,你已经学习了如何使用Kubernetes来管理一个简单的容器化应用。Kubernetes的强大之处在于它可以自动处理应用的部署、扩展和故障恢复,使得开发者可以专注于编写代码而不是运维细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/903843.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java知识巩固(十二)

I/O JavaIO流了解吗&#xff1f; IO 即 Input/Output&#xff0c;输入和输出。数据输入到计算机内存的过程即输入&#xff0c;反之输出到外部存储&#xff08;比如数据库&#xff0c;文件&#xff0c;远程主机&#xff09;的过程即输出。数据传输过程类似于水流&#xff0c;因…

Android中的epoll机制

深入理解Android中的epoll机制 在Android系统中&#xff0c;epoll广泛用于高效管理网络和文件的I/O操作。它通过减少CPU资源消耗和避免频繁的内核态-用户态切换&#xff0c;实现了在多连接、多任务环境中的高性能。epoll的特性使其非常适合Android系统中网络服务器、Socket通信…

Hash表算法

哈希表 理论知识&#xff08;本文来自于代码随想录摘抄&#xff09;什么是哈希常见的三种哈希结数组&#xff1a;set:map:其他常用方法或者技巧&#xff08;自己总结的&#xff09; 练习题和讲解有效的字母移位词349. 两个数组的交集1. 两数之和454. 四数相加 II15. 三数之和 总…

Java SPI 机制详解

面向对象设计鼓励模块间基于接口而非具体实现编程&#xff0c;以降低模块间的耦合&#xff0c;遵循依赖倒置原则&#xff0c;并支持开闭原则&#xff08;对扩展开放&#xff0c;对修改封闭&#xff09;。然而&#xff0c;直接依赖具体实现会导致在替换实现时需要修改代码&#…

宇音天下最新力作 | VTX356语音识别合成芯片问世

北京宇音天下科技有限公司&#xff0c;依托在语音技术领域的丰富经验和技术积累&#xff0c;成功推出了一款具有里程碑意义的语音识别合成芯片——VTX356。这款芯片的问世&#xff0c;不仅彰显了公司在智能语音处理领域的专业实力&#xff0c;也预示着智能家居、车载电子、智能…

51c视觉~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11474386 #HAFormer 融合 CNN 与 Transformer 的高效轻量级语义分割模型 HAFormer以最小的计算开销和紧凑的模型尺寸实现了高性能&#xff0c;在Cityscapes上的mIoU达到了74.2%&#xff0c;在CamVid测试数据集上的mIoU达到…

Spring Boot集成Milvus和deeplearning4j实现图搜图功能

1.什么是Milvus&#xff1f; Milvus 是一种高性能、高扩展性的向量数据库&#xff0c;可在从笔记本电脑到大型分布式系统等各种环境中高效运行。它既可以开源软件的形式提供&#xff0c;也可以云服务的形式提供。 Milvus 是 LF AI & Data Foundation 下的一个开源项目&…

[含文档+PPT+源码等]精品基于PHP实现的培训机构信息管理系统的设计与实现

基于PHP实现的培训机构信息管理系统的设计与实现背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、社会发展与教育需求 随着经济的不断发展和人口数量的增加&#xff0c;教育培训行业迎来了前所未有的发展机遇。家长对子女教育的重视程度日益提高&#xff0c;课外…

wireshark筛选条件整理

Wireshark筛选条件整理 一、MAC地址过滤二、IP地址过滤三、端口过滤四、协议筛选五、数据分析1、整体2、frame数据帧分析3、 Ethernet II 以太网4、IP协议5、TCP6、HTTP7、ARP8、DLEP动态链接交换协议 六、统计-协议分级&#xff08;统计包占比&#xff09; and && 、 …

通俗直观介绍ChatGPT背后的大语言模型理论知识

“AI 的 iPhone 时刻到来了”。非算法岗位的研发同学’被迫’学习 AI&#xff0c;产品岗位的同学希望了解 AI。但是&#xff0c;很多自媒体文章要么太严谨、科学&#xff0c;让非科班出身的同学读不懂&#xff1b;要么&#xff0c;写成了科幻文章&#xff0c;很多结论都没有充分…

『完整代码』宠物召唤

创建脚本并编写&#xff1a;PetFollowTarget.cs using UnityEngine; public class PetFollowTarget : MonoBehaviour{Transform target;float speed 2f;Animator animator;void Start(){target GameObject.Find("PlayerNormal/PetsSmallPos").gameObject.transform…

macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程

想要把dmg格式转成iso格式&#xff0c;然后能在虚拟机上用&#xff0c;最起码新版的macOS镜像是不能用UltraISO&#xff0c;dmg2iso这种软件了&#xff0c;你直接转放到VMware里绝对读不出来&#xff0c;办法就是&#xff0c;在Mac系统中转换为cdr&#xff0c;然后再转成iso&am…

【MySQL备份】使用XtraBackup搭建GTID主从复制

创建备份账号 这里给了all 权限 grant all on *.* to backup% identified by backup; 在主库上进行全备 xtrabackup --defaults-file/home/storage/mysql_3306/mysql_3306.cnf --backup --userbackup --passwordbackup --port3306 --target-dir/home/backups/all_xtrabp 备…

java中Scanner的nextLine和next方法

思考&#xff0c;输入1 2 3 4 5加上enter&#xff0c;输出什么 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[][] m new int[2][2];for (int i 0; i < 2; i) {for (int j 0; j < 2;…

DEVOPS: 容器与虚拟化与云原生

概述 传统虚拟机&#xff0c;利用 hypervisor&#xff0c;模拟出独立的硬件和系统&#xff0c;在此之上创建应用虚拟机是一个主机模拟出多个主机虚拟机需要先拥有独立的系统docker 是把应用及配套环境独立打包成一个单位docker 是在主机系统中建立多个应用及配套环境docker 是…

OKCC的API接口与SDK的区别

随着累计的客户越来越多&#xff0c;客户的多元化就成了必然。以前最早我们的客户群体占比最大的可能是话务运营这个圈子。但是现在很多企业软件开发公司也成为了合作伙伴&#xff0c;那么这种就不是简单的搭建一套OKCC系统&#xff0c;然后配上线路就完成了&#xff0c;而是要…

大数据新视界 -- 大数据大厂之大数据重塑影视娱乐产业的未来(4 - 4)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

鸿蒙的底部菜单导航实现

开始入坑鸿蒙 效果图图下&#xff1a; Index代码如下: import Home from "../pages/home/Home" //首页 import Classify from "./classify/Classify" //分类 import Mine from "../pages/mine/Mine" //我的 Entry Component struct Index {Sta…

实现企业微信打卡月报与简道云的高效集成

实现企业微信打卡月报与简道云的高效集成 企业微信打卡月报同步到简道云 在企业管理中&#xff0c;员工的考勤数据是至关重要的一环。为了实现高效的数据管理和分析&#xff0c;我们需要将企业微信的打卡月报数据集成到简道云平台。本文将分享一个具体的技术案例&#xff0c;展…

【力扣专题栏】两两交换链表中的节点,如何实现链表中两两相邻节点的交换?

这里写目录标题 1、题目描述解释2、算法原理解析3、代码编写 1、题目描述解释 2、算法原理解析 3、代码编写 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int…