【k8s】使用k8s部署一个简单的nginx服务
名词解释
Namespace 表示命名空间
Deployment 表示pod发布
Service 表示多个pod做为一组的集合对外通过服务的表示
kubectl 是k8s的命令行操作命令,可以创建和更新,删除,列表和查详情等一系列的操作
部署步骤
同样的方法将deployment改成service,可以实现对service的增删该查等操作。
一、创建命名空间namespace
1. 创建命名空间的yaml文件 nginx-namespace.yaml
- apiVersion: v1
- kind: Namespace
- metadata:
- name: nginx
- labels:
- name: nginx
配置说明:
kind:Namespace 表示yaml文件创建的是命名空间
metadata表示命名空间的元信息
metadata.name 是命名空间的名称 取值nginx
metadata.labels 是命名空间的标签 name=nginx
2. 创建命名空间nginx
- kubectl create -f nginx-namespace.yaml
3. 查询命名空间
- # 查询所有命名空间,可以看到新创建的命名空间nginx
- ➜ kube kubectl get namespaces
- NAME STATUS AGE
- default Active 85d
- kube-node-lease Active 85d
- kube-public Active 85d
- kube-system Active 85d
- nginx Active 8d
4. 查询命名空间nginx详情
- ➜ kube kubectl describe namespace nginx
- Name: nginx
- Labels: name=nginx
- Annotations: <none>
- Status: Active
总结:
从命名空间详情中可以看到如下信息
命名空间名称: nginx
命名空间的标签:name=nginx
命名空间状态:Active 表示命名空间活跃
二、创建nginx的发布Deployment
1. 创建deployment的yaml文件 nginx-deployment.yaml
- ➜ kube cat nginx-deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- labels:
- app: nginx
- name: nginx-deployment1
- namespace: nginx
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - image: nginx:1.14.0
- ports:
- - containerPort: 80
- name: nginx
- volumeMounts:
- - name: conf
- mountPath: /etc/nginx/nginx.conf
- - name: log
- mountPath: /var/log/nginx
- - name: html
- mountPath: /etc/nginx/html
- tolerations:
- - key: "key"
- operator: "Equal"
- value: "nginx"
- effect: "NoSchedule"
- volumes:
- - name: conf
- hostPath:
- path: /Users/w/kube/nginx/conf/nginx.conf
- - name: log
- hostPath:
- path: /Users/w/kube/nginx/logs
- type: Directory
- - name: html
- hostPath:
- path: /Users/w/kube/nginx/html
- type: Directory
配置说明:
kind: Deployment表示yaml文件创建的是一个Deployment发布
metadata表示这个deployment的元信息
metadata.name 是deployment的名称 nginx-deployment1
metadata.labels 是deployment的标签 即:app=nginx
metadata.namespace 是deployment的命名空间,此处选择的是第一步创建的命名空间nginx
spec: 表示deployment的详细参数配置说明
spec.replicas 是启动几个pod节点
spec.template.spec 是deployment选择模块的详细说明
spec.template.spec.containers 表示选择的容器是什么,此处是nginx的docker镜像 nginx:1.14.0,容器的端口设置 containerPort: 80, volumeMounts表示绑定的文件和目录
spec.template.spec.volumes 表示选择的容器挂载的宿主机的文件和目录 conf, log和html
2. 创建deployment的nginx
- kubectl create -f nginx-deployment.yaml
3. 查询nginx命名空间下的pods
- # ➜ kube kubectl get pods -n nginx
- NAME READY STATUS RESTARTS AGE
- nginx-deployment1-6cb86fb6b7-kkpbw 1/1 Running 5 7d20h
可以看到有一个nginx-deployment的pods, 启动了1个pods运行Running状态
可以通过修改如上yaml文件的spec.replicas启动多个pods,
增加pods节点从1个到3个如下
spec.replicas: 3
- # ➜ kube kubectl get pods -n nginx
- NAME READY STATUS RESTARTS AGE
- nginx-deployment1-6cb86fb6b7-kkpbw 1/1 Running 5 7d20h
- nginx-deployment1-6cb86fb6b7-txkkj 0/1 ContainerCreating 0 1s
- nginx-deployment1-6cb86fb6b7-ztt2t 0/1 ContainerCreating 0 1s
如上可以看到有两个新的pod处于容器创建中状态,容器创建成功后,状态会转移到Running,READY也会变成1/1
减少pods节点从3个到1个如下
- # ➜ kube kubectl apply -f nginx-deployment.yaml
- deployment.apps/nginx-deployment1 configured
- # ➜ kube kubectl get pods -n nginx
- NAME READY STATUS RESTARTS AGE
- nginx-deployment1-6cb86fb6b7-d6z6l 1/1 Terminating 0 98s
- nginx-deployment1-6cb86fb6b7-kkpbw 1/1 Running 5 7d20h
- nginx-deployment1-6cb86fb6b7-qtx2v 1/1 Terminating 0 98s
如上所示,有两个pod状态是终止中,只剩余一个处于Running状态
4. 查询命名空间nginx下的发布deployment
- # ➜ kube kubectl describe deployment nginx -n nginx
- Name: nginx-deployment1
- Namespace: nginx
- CreationTimestamp: Thu, 30 Sep 2021 11:46:53 +0800
- Labels: app=nginx
- Annotations: deployment.kubernetes.io/revision: 1
- Selector: app=nginx
- Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
- # ...
可以看到pods节点是1个。
5. 查询命名空间nginx下的发布pod详情
- # ➜ kube kubectl describe pod nginx-deployment1-6cb86fb6b7-kkpbw -n nginx
- Name: nginx-deployment1-6cb86fb6b7-kkpbw
- Namespace: nginx
- Priority: 0
- Node: docker-desktop/192.168.65.4
- Start Time: Thu, 30 Sep 2021 15:12:48 +0800
- Labels: app=nginx
- pod-template-hash=6cb86fb6b7
- Annotations: <none>
- Status: Running
- IP: 10.1.0.170
- # ...
6. 删除一个deployment的pod节点
- # ➜ kube kubectl delete pod nginx-deployment1-6cb86fb6b7-txkkj -n nginx
- pod "nginx-deployment1-6cb86fb6b7-txkkj" deleted
三、创建nginx的服务Service
1. 创建service的yaml文件 nginx-service.yaml
- # ➜ kube cat nginx-service.yaml
- apiVersion: v1
- kind: Service
- metadata:
- labels:
- app: nginx
- name: nginx-deployment1
- namespace: nginx
- spec:
- ports:
- - port: 9000
- name: nginx-service80
- protocol: TCP
- targetPort: 80
- nodePort: 31090
- selector:
- app: nginx
- type: NodePort
配置说明:
kind: Service表示yaml文件创建的是一个Service
metadata表示这个Service的元信息
metadata.name 是Service的名称 nginx-deployment1
metadata.labels 是Service的标签 即:app=nginx
metadata.namespace 是Service的命名空间,此处选择的是第一步创建的命名空间nginx
sepc是Service的详细配置说明
sepc.type 取值NodePort 表示这个Service的类型是一个节点端口转发类型
sepc.selector 表示这个Service是将带标签的哪些pods做为一个集合对外通过服务
sepc.ports.port 是Service绑定的端口
sepc.ports.name: nginx-service80 表示Service服务的名称
sepc.ports.protocol: TCP 表示Service转发请求到容器的协议是TCP,我们部署的http的nginx服务,因此选择协议为TCP
sepc.ports.targetPort: 80 表示Service转发外部请求到容器的目标端口80,即deployment的pod容器对外开放的容器端口80
sepc.ports.nodePort: 31090 表示Service对外开放的节点端口
2. 创建一个服务
- # ➜ kube kubectl create -f nginx-service.yaml
- service/nginx-deployment1 created
即可以使用浏览器打开这个端口的页面,如下
4. 查询服务列表
- # ➜ kube kubectl get services -n nginx
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- nginx-deployment1 NodePort 10.96.92.3 <none> 9000:31090/TCP 34s
5. 查询服务详情
- # ➜ kube kubectl describe service nginx-deployment1 -n nginx
- Name: nginx-deployment1
- Namespace: nginx
- Labels: app=nginx
- Annotations: <none>
- Selector: app=nginx
- Type: NodePort
- IP: 10.96.92.3
- LoadBalancer Ingress: localhost
- Port: nginx-service80 9000/TCP
- TargetPort: 80/TCP
- NodePort: nginx-service80 31090/TCP
- Endpoints: 10.1.0.170:80,10.1.0.176:80,10.1.0.178:80
- Session Affinity: None
- External Traffic Policy: Cluster
- Events: <none>
6. 删除一个service服务
- # ➜ kube kubectl delete services nginx-deployment1 -n nginx
- service "nginx-deployment1" deleted
如上就是通过k8s简单部署一个nginx服务的步骤
其中包括如下步骤
- 命名空间的创建
- 标签的增加
- deployment的pods发布,增加和减少pods的方法
- 节点端口转发的Service创建
- 删除一个服务
- 删除一个pod
done.
祝玩的开心~
【k8s】使用k8s部署一个简单的nginx服务的更多相关文章
- 基于k8s集群部署prometheus监控ingress nginx
目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...
- 开发部署一个简单的Servlet
Servlet是一个执行在服务器端的Java Class文件,载入前必须先将Servlet程序代码编译成.class文件,然后将此class文件放在servlet Engline路径下.Servlet ...
- gRPC初探——概念介绍以及如何构建一个简单的gRPC服务
目录 引言 1. gRPC简介 2. 使用Protocol Buffers进行服务定义 2.1 定义消息 2.2 定义服务接口 3.构建简单的gRPC服务 3.1 编写proto文件,定义消息和接口 ...
- 超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务
来自:JavaGuide Github 地址:https://github.com/Snailclimb/springboot-integration-examples 目录: 使用 SpringBo ...
- [WCF REST] 一个简单的REST服务实例
Get:http://www.cnblogs.com/artech/archive/2012/02/04/wcf-rest-sample.html [01] 一个简单的REST服务实例 [02] We ...
- linux系统下开启一个简单的web服务
linux 下开启一个简单的web服务: 首先需要linux下安装nodejs 然后创建一个test.js: vi test.js var http =require("http&quo ...
- node创建一个简单的web服务
本文将如何用node创建一个简单的web服务,过程也很简单呢~ 开始之前要先安装node.js 1.创建一个最简单的服务 // server.js const http = require('http ...
- laravel学习:php写一个简单的ioc服务管理容器
php写一个简单的ioc服务管理容器 原创: 陈晨 CoderStory 2018-01-14 最近学习laravel框架,了解到laravel核心是一个大容器,这个容器负责几乎所有服务组件的实例化以 ...
- kubernetes实战篇之部署一个.net core微服务项目
目录 继上一篇kubernetes理论知识完结.本篇主要讲解基于nexus搭建一个docker镜像仓库(当然大家实践过程是不必完全跟着做,也可以搭建harbor仓库或者直接把镜像推送到docker h ...
随机推荐
- 三:ServletContext对象
一.ServletContext对象 1.什么是ServletContext对象 ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象 内部封装是该w ...
- Java异常与异常处理
异常体系结构 1.所有异常都继承于Throwable类,其下有两大子类: (1)Error类:错误,一般编程人员不太接触,如虚拟机错误.线程死锁.硬伤:使程序崩溃 (2)Exception类:异常,编 ...
- Vue状态管理模式---Vuex
1. Vuex是做什么的? 官方解释: Vuex 是一个专为Vue.js 应用程序开发的 状态管理模式 它采用 集中式存储管理 应用的所有组件的状态, 并以相应的规则保证状态以一种可预测的方式发生变化 ...
- 快速使用 Docker 上手 Sentry-CLI - 玩转 Source Maps 使用 (create-react-app)
系列 快速使用 Docker 上手 Sentry-CLI - 创建版本 入门 使用 sentry-cli 上传 source maps 时,您需要设置构建系统以创建版本(release)并上传与该版本 ...
- 教你用multipass快速搭建k8s集群
目录 前言 一.multipass快速入门 安装 使用 二.使用multipass搭建k8s集群 创建3台虚拟机 安装master节点 安装node节点 测试k8s集群 三.其他问题 不能拉取镜像:报 ...
- PyQt5 笔记
一.简介 pyqt5做为Python的一个模块,它有620多个类和6000个函数和方法.这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows,Mac OS.pyqt5是 ...
- vue实现拖动div元素
html: <div id="app1"> <div v-drag class="drag"></div> <div ...
- salesforce零基础学习(一百零六)Dynamic Form
本篇参考:https://trailblazer.salesforce.com/ideaview?id=08730000000BroxAAC https://help.salesforce.com/s ...
- 取消input默认提示框
input输入框有自动保存记忆功能,点击的时候之前输入的内容会在下拉框自动提示 autocomplete="off",这是H5的一个属性. <input type=" ...
- salesforce零基础学习(一百零七)Dynamic Action
说一下项目中常见的甲方的需求.背景如下:Order在SF端生成以后,在status为completed以后,需要点击按钮同步到SAP或者其他的MDM,客户希望的是,如果 order的状态为 compl ...