【K8S】Hello World

1 搭建本地测试环境

本文以 mac os为例

1.1 安装 docker和 Colima

brew install docker
brew install colima

1.2 安装 minikube

  • minikube用来管理本地k8s集群
brew install minikube
  • 常用命令
minikube stop #不会删除任何数据,只是停止 VM 和 k8s 集群。

minikube delete #删除所有 minikube 启动后的数据。

minikube ip #查看集群和 docker enginer 运行的 IP 地址。

minikube pause #暂停当前的资源和 k8s 集群

minikube status #查看当前集群状态

1.3 启动minikube

minikube start --vm-driver docker --container-runtime=docker

1.4 安装 kubectl

brew install kubectl

1.5 注册 docker hub镜像仓库

  • 在页面注册后,使用账号密码登录,登录前需要先启动 docker
docker login
  • 如果登录遇到这样的报错:
Post "http://ipc/registry/credstore-updated": dial unix backend.sock: connect: no such file or directory

则修改~/.docker/config.json文件,删除下面这一行,然后重新使用登录命令即可。

"credsStore": "desktop"

2 k8s核心资源概念

2.1 Pod

  • pod是k8s中创建和管理的、最小的可部署的计算单元。
  • 服务运行在容器当中, container (容器) 的本质是进程,而 pod 是管理这一组进程的资源。一个 pod可以管理多个 container。
    在这里插入图片描述
  • 创建一个 pod的示例配置文件
# nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx-container
      image: nginx
  • 通过 kubectl相关命令创建
kubectl apply -f nginx.yaml
kubectl get pods
kubectl port-forward nginx-pod 4000:80
kubectl exec -it nginx-pod /bin/bash
kubectl describe pod nginx-pod

2.2 Deployment

  • Deployment是 k8s中帮助我们管理 pod的资源,比如自动扩容和升级版本。
  • 创建一个 Deployment的示例配置文件。template 标签下的内容是用来定义 pod 资源的,我们需要加上 metadata.labels 来和上面的 selector.matchLabels 对应起来。来表明 pod 是被 deployment 管理,不用在template 里面加上 metadata.name 是因为 deployment 会主动为我们创建 pod 的唯一name
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hellok8s-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hellok8s
  template:
    metadata:
      labels:
        app: hellok8s
    spec:
      containers:
        - image: xxxx/hellok8s:v1
          name: hellok8s-container
  • 当手动删除一个 pod资源后,deployment 会自动创建一个新的 pod。
    在这里插入图片描述
  • 回滚操作
kubectl rollout undo deployment hellok8s-deployment
kubectl rollout history deployment hellok8s-deployment
kubectl rollout undo deployment/hellok8s-deployment --to-revision=2

2.3 Service

  • Service 为 pod 提供一个稳定的 Endpoint。Service 位于 pod 的前面,负责接收请求并将它们传递给它后面的所有pod。一旦服务中的 Pod 集合发生更改,Endpoints 就会被更新,请求的重定向自然也会导向最新的 pod。
  • 创建一个 Deployment的示例配置文件。
# service-hellok8s-clusterip.yaml
apiVersion: v1
kind: Service
metadata:
  name: service-hellok8s-clusterip
spec:
  type: ClusterIP
  selector:
    app: hellok8s
  ports:
  - port: 3000
    targetPort: 3000
  • 在集群中,可以通过访问 service 的 IP 来访问下面的 pods
kubectl get service

在这里插入图片描述

  • 在集群外部访问 pod的 IP
apiVersion: v1
kind: Service
metadata:
  name: service-hellok8s-nodeport
spec:
  type: NodePort
  selector:
    app: hellok8s
  ports:
  - port: 3000
    nodePort: 30000
  • 如果 minikube使用的参数是--driver=docker,需要使用以下命令。
minikube service service-hellok8s-nodeport --url

2.4 Ingress

  • Ingress 可以“简单理解”为服务的网关 Gateway,它是所有流量的入口,经过配置的路由规则,将流量重定向到后端的服务。
  • minikube开启 Ingress-Controller功能
minikube addons enable ingress
kubectl delete deployment,service --all

在这里插入图片描述

参考资料

相关推荐

  1. k8s学习

    2023-12-08 06:26:03       33 阅读
  2. <span style='color:red;'>K</span><span style='color:red;'>8</span>s基础

    K8s基础

    2023-12-08 06:26:03      39 阅读
  3. <span style='color:red;'>k</span><span style='color:red;'>8</span>s-Pod

    k8s-Pod

    2023-12-08 06:26:03      32 阅读
  4. 学习<span style='color:red;'>k</span><span style='color:red;'>8</span>s

    学习k8s

    2023-12-08 06:26:03      31 阅读
  5. K8s 教程

    2023-12-08 06:26:03       47 阅读
  6. <span style='color:red;'>k</span><span style='color:red;'>8</span>s基础

    k8s基础

    2023-12-08 06:26:03      37 阅读
  7. <span style='color:red;'>k</span><span style='color:red;'>8</span>s初学

    k8s初学

    2023-12-08 06:26:03      32 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 06:26:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 06:26:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 06:26:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 06:26:03       20 阅读

热门阅读

  1. 深度学习TensorFlow2基础知识学习后半部分

    2023-12-08 06:26:03       36 阅读
  2. 在浏览器中使用TensorFlow.js

    2023-12-08 06:26:03       47 阅读
  3. WPF MVVM模式下如何将UI窗口变量传参到Viewmodel层

    2023-12-08 06:26:03       36 阅读
  4. python乐观锁和悲观锁

    2023-12-08 06:26:03       36 阅读
  5. 入门低代码开发:快速构建应用程序的方法

    2023-12-08 06:26:03       35 阅读
  6. qt mingw编辑器的编码问题

    2023-12-08 06:26:03       33 阅读
  7. C#winform点击按钮下载数据库中表的字段到Excel上

    2023-12-08 06:26:03       39 阅读
  8. echarts词云图echarts-wordcloud使用方法

    2023-12-08 06:26:03       41 阅读
  9. 处理too many open files相关限制及拓展

    2023-12-08 06:26:03       34 阅读
  10. electron-builder 的基本使用

    2023-12-08 06:26:03       33 阅读
  11. tomcat反序列化

    2023-12-08 06:26:03       37 阅读