k8s免安装-使用kubectl部署Pod, Deployment, LoadBalancer

2023-05-16

如果你想要从零开始搭建自己的k8s集群参考我的这篇博客,预计花费时间为1天:从零开始在ubuntu上安装和使用k8s集群及报错解决

自己搭建k8s集群的难点之一是需要3台ubuntu虚拟机,要求电脑至少10G内存:操作系统4G内存,3台虚拟机需要6G内存。

另一个难度是对初学者来说,搭建太复杂了。

如果你不想手动搭建集群,只想体验和使用kubernetes集群,推荐使用digitaloceankubernetes集群服务,自动搭建,无需安装。

digitaloceankubernetes集群提供3台ubuntu虚拟机(node),每台1核CPU,2G内存,共30$一个月,体验一天只要1$。

通过我的链接在digitalocean注册的新用户,可以获得100美元的2个月使用权,相当于前2个月免费用:DigitalOcean – sign up

创建kubernetes集群后,DO会提醒你使用kubectl或者doctl操作集群,我推荐kubectl这个通用工具。

在本地linux上安装kubectl,通过 kubectl 操作 k8s 集群。

echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB #对安装包进行签名
sudo gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update
sudo apt install kubectl

安装完成后下载yaml配置文件到目录~/.kube,然后运行:

-> # cd ~/.kube && mv k8s-zhang0peter-kubeconfig.yaml config
-> # kubectl get nodes                                          
NAME                  STATUS   ROLES    AGE    VERSION
pool-7wa24lnka-v3sf   Ready    <none>   11m    v1.16.2
pool-7wa24lnka-v3sq   Ready    <none>   11m    v1.16.2
pool-7wa24lnka-v3sy   Ready    <none>   8m8s   v1.16.2

可以看到集群的状态是Ready

部署前先创建命名空间,防止污染:

-> # kubectl create namespace flask-test
namespace/flask-test created 
-> # kubectl get namespace
NAME              STATUS   AGE
default           Active   169m
flask             Active   30m
flask-test        Active   65s
kube-node-lease   Active   169m
kube-public       Active   169m
kube-system       Active   169m

部署单个 pod

编辑flask-pod.yaml文件如下:

apiVersion: v1
kind: Pod
metadata:
        name: flask-pod
        labels:
           app: flask-helloworld
spec:
        containers:
        - name:  flask
          image: registry.cn-hangzhou.aliyuncs.com/zhang0peter/flask:v0
          ports:
          - containerPort: 5000

部署应用:

-> # kubectl apply -f flask-pod.yaml -n flask-test
pod/flask-pod created
-> # kubectl get pod -n flask-test
NAME        READY   STATUS    RESTARTS   AGE
flask-pod   1/1     Running   0          12s

转发端口并访问:

-> # kubectl port-forward pods/flask-pod 5000:5000 -n flask-test
Forwarding from 127.0.0.1:5000 -> 5000
Handling connection for 5000

-> %  curl http://127.0.0.1:5000
hello world!

删除 Pod:

-> # kubectl delete pod flask-pod -n flask-test
pod "flask-pod" deleted

部署 Deployment

编写flask-deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
    name: flask-dep
    labels:
        app: flask-helloworld
spec:
    replicas: 2
    selector:
        matchLabels:
          app: flask-helloworld
    template:
        metadata:
          labels:
            app: flask-helloworld
        spec:
            containers:
            - name:  flask
              image: 'registry.cn-hangzhou.aliyuncs.com/zhang0peter/flask:v0'
              ports:
              - containerPort: 5000

部署 Deployment:

-> # kubectl apply -f flask-deployment.yaml -n flask-test
deployment.apps/flask-dep created
-> # kubectl get deploy -n flask-test
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
flask-dep   2/2     2            2           12s
-> # kubectl get pod -n flask-test
NAME                         READY   STATUS    RESTARTS   AGE
flask-dep-56bcc4b6c5-44gkv   1/1     Running   0          25s
flask-dep-56bcc4b6c5-kkkvl   1/1     Running   0          25s

转发端口并访问:

-> # kubectl port-forward deployment/flask-dep 5000:5000 -n flask-test
Forwarding from 127.0.0.1:5000 -> 5000
Handling connection for 5000

-> %  curl http://127.0.0.1:5000
hello world!

不要删除Deployment,后面还要用。

部署负载均衡应用

编写flask-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: flask-svc
  labels:
    app: flask-helloworld
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 5000
    protocol: TCP
  selector:
    app: flask-helloworld

部署 LoadBalancer 负载均衡:

-> # kubectl apply -f flask-service.yaml -n flask-test
service/flask-svc created
-> # kubectl get service -n flask-test
NAME        TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
flask-svc   LoadBalancer   10.245.139.6   <pending>     80:32349/TCP   9s

等待约5分钟,负载均衡实现,对外暴露端口:

-> # kubectl get service -n flask-test   
NAME        TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
flask-svc   LoadBalancer   10.245.139.6   139.59.194.75   80:32349/TCP   4m23s
-> # curl 139.59.194.75
hello world!            

删除 service

-> # kubectl delete service flask-svc -n flask-test   
service "flask-svc" deleted

部署结束。

参考:

  • A DigitalOcean Workshop: Get Started with Containers and Kubernetes - YouTube
  • Getting Started with Containers and Kubernetes: A DigitalOcean Workshop Kit DigitalOcean
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s免安装-使用kubectl部署Pod, Deployment, LoadBalancer 的相关文章

  • 聊聊java中一些减少if-else 的编码方式!

    01 前言 前段时间在阅读别人所写的代码的时候 发现其中一些业务相关的方法体内 出现了比较多的if else语句多层嵌套的情况 首先我个人不是不提倡写if else语句 不得不说 很多时候 在写某些逻辑 使用if else 去做判断 代码看
  • 如何用简单方法推导正弦函数的和角公式: sin(α+β)=sinαcosβ+cosαsinβ ?

    问题 xff1a 看2014年湖北省高考理科数学题 xff0c 选择题第6题 xff1a 这道题目答案是C xff0c 组是正交函数 xff0c 组不是正交函数 可以用数形结合方式 xff0c 快速做出判断 详细解析如下 分析 xff1a
  • Http头部参数:Authorization

    项目uu约优中 xff0c 用到了头部Authorization 当时传递的参数也是后端返回的20位字符 项目sxaik中 xff0c http请求的头部传递Authorization xff0c 值为32位小写字符 xff0c 不确定是m
  • 高性能计算

    信息时代的硬件芯片和存储器价格以摩尔定律的形式下降 xff0c 可是现在处理的数据量也越来越大 我们先以cocoa编程为例 xff0c 然后再结合网格计算 云计算 xff0c 综合对最新的高性能计算技术作介绍 使用 runloop 在coc
  • @Documented注解的作用

    目录 在哪里用到了 96 64 Documented 96 注解 xff1f 那么 64 Documented的作用是什么 xff1f 在哪里用到了 64 Documented注解 xff1f 64 Documented是元注解 xff0c
  • 球的表面积公式是怎么推导出来的?

    球的体积公式的推导 球的表面积公式是 xff1a 证明方式一 xff1a 体积求导 基本思路 xff1a 可以把半径为R的球 xff0c 从球心到球表面分成n层 xff0c 每层厚为 r n xff0c 像洋葱一样 半径获得增量是 r xf
  • ViewBinding简单使用

    官方文档 xff1a https developer android google cn topic libraries view binding hl 61 zh cn java 在app module下的build gradle文件中
  • Android广播实现进程间通信,很简单

    应用A发送广播 xff1a span class token keyword public span span class token keyword class span span class token class name MainA
  • 下载JDK8 JVM源码

    性子急的可以直接看快速下载步骤 xff1a 目录 详细步骤快速下载步骤 详细步骤 打开openJDK官网 xff1a https openjdk org 找到左侧的Mercurial xff0c 点击进入新界面 选择jdk8 xff0c 点
  • Git查看分支的创建人

    开发小组人多的时候 xff0c 仓库里会有跟多分支 xff0c 需要看下某个分支具体是谁创建的 命令 xff1a git for each ref format 61 39 committerdate 09 authorname 09 re
  • kotlin的this关键字几种用法

    与java不同的是 xff0c 原先MainActivity this这种写法在kotlin中会报错 如下 正确的写法有许多 xff0c 直接就写this也可以识别到 xff0c 如下 xff1a span class token clas
  • kotlin中匿名内部类的写法

    原本java开发安卓常用的setOnClickListener xff0c 用kotlin写 xff0c 也变得五花八门了 span class token keyword var span view span class token op
  • Spring与SpringMVC的区别和联系是啥?

    Spring Spring是一个开源容器框架 xff0c 可以接管web层 xff0c 业务层 xff0c dao层 xff0c 持久层的组件 xff0c 并且可以配置各种bean 和维护bean与bean之间的关系 其核心就是控制反转 I
  • “在XML文件中给代码加注释”请注意注释的位置

    先科普一下eclipse加注释的快捷键 xff1a eclipse中编辑Java文件时 xff0c 注释和取消注释的快捷键都是 xff1a 34 CTRL 43 34 编辑xml文件时 xff0c 注释 xff1a CTRL 43 SHIF
  • HTTP代理服务器的实现

    接下来都是我对HTTP代理服务器的理解 HTTP代理服务 xff08 proxy server xff09 器就是客户端也是服务端 xff0c 是一个事务处理的中间人 xff0c 就像下图所展示的一样 xff0c 图片来源于 HTTP权威指
  • “无法识别的USB设备”如何解决

    昨天 xff0c 我把USB数据线插入笔记本电脑做真机调试 xff0c 电脑右下角提示显示 无法识别的USB设备 xff0c 我开始百度 xff08 还不会搭梯子用google xff09 xff0c 搜索结果大多说是要更新驱动 xff0c
  • 解决Android studio 模拟器闪烁黑屏问题

    首先 xff0c 必须感谢csdn大神给我的启示 xff0c 但是原文并没有解决我的问题 我在看 第一行代码 的时候 xff0c 跟着郭霖大神的思路 xff0c 想利用cmd命令查看虚拟机中的 db文件中的数据表 因为真机需要root才能查
  • Android studio如何更改应用程序的图标以及名称

    如何在Android studio中更改应用程序的图标和名称是很多初学者遇到的问题之一 xff0c 今天我就来给大家讲一下简单的步骤 1 更改图标 首先选中我们需要更改的工程 xff0c 然后new gt Image Asset 就来到了更
  • Matlab中矩阵的合并、某行某列的删除、矩阵大小的改变(完整的函数调用表)、矩阵元素的访问

    矩阵的合并 矩阵的合并就是把两个或两个以上的矩阵合并成一个新的矩阵 可用于构造矩阵 xff0c 也可用于合并矩阵 c 61 A B 就是在水平方向上合并矩阵A和矩阵B c 61 A B 就是在竖直方向上合并矩阵A和矩阵B 如下 xff1a
  • Matlab里for循环详解

    for循环用来重复指定次数 xff0c 由于for 循环变量 end组成 例1 xff1a span class token keyword for span i span class token operator 61 span span

随机推荐