名词解释

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服务的更多相关文章

  1. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  2. 开发部署一个简单的Servlet

    Servlet是一个执行在服务器端的Java Class文件,载入前必须先将Servlet程序代码编译成.class文件,然后将此class文件放在servlet Engline路径下.Servlet ...

  3. gRPC初探——概念介绍以及如何构建一个简单的gRPC服务

    目录 引言 1. gRPC简介 2. 使用Protocol Buffers进行服务定义 2.1 定义消息 2.2 定义服务接口 3.构建简单的gRPC服务 3.1 编写proto文件,定义消息和接口 ...

  4. 超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务

    来自:JavaGuide Github 地址:https://github.com/Snailclimb/springboot-integration-examples 目录: 使用 SpringBo ...

  5. [WCF REST] 一个简单的REST服务实例

    Get:http://www.cnblogs.com/artech/archive/2012/02/04/wcf-rest-sample.html [01] 一个简单的REST服务实例 [02] We ...

  6. linux系统下开启一个简单的web服务

    linux 下开启一个简单的web服务: 首先需要linux下安装nodejs 然后创建一个test.js:   vi test.js var http =require("http&quo ...

  7. node创建一个简单的web服务

    本文将如何用node创建一个简单的web服务,过程也很简单呢~ 开始之前要先安装node.js 1.创建一个最简单的服务 // server.js const http = require('http ...

  8. laravel学习:php写一个简单的ioc服务管理容器

    php写一个简单的ioc服务管理容器 原创: 陈晨 CoderStory 2018-01-14 最近学习laravel框架,了解到laravel核心是一个大容器,这个容器负责几乎所有服务组件的实例化以 ...

  9. kubernetes实战篇之部署一个.net core微服务项目

    目录 继上一篇kubernetes理论知识完结.本篇主要讲解基于nexus搭建一个docker镜像仓库(当然大家实践过程是不必完全跟着做,也可以搭建harbor仓库或者直接把镜像推送到docker h ...

随机推荐

  1. linux 端口80占用问题

    主要是搭建一次ghost博客网站改成80端口无法启动提示被占用. 提示:80端口被占用,启动失败. netstat -ano 或者 netstat -apn | grep 80 没有发现占用80端口的 ...

  2. mzy,struts学习(二):struts.xml的配置

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...

  3. hdfs中数据迁移

    1.hdfs集群间数据迁移 hadoop distcp hdfs://192.128.112.66:8020/user/hive/warehouse/data.db/dwi_xxxx_d  /user ...

  4. 并发控制--context篇

    目录 1. 前言 2 Context 实现原理 2.1 接口定义 2.1 cancelCtx 2.1.1 Done()接口实现 2.1.2 Err()接口实现 2.1.3 cancel()接口实现 2 ...

  5. Go语言 判断key是否在map里 if _, ok := map[key]; ok

    if val, ok := map[key]; ok { //do something here } 如果key在map里 val 被赋值map[key] ok 是true 否则val得到相应类型的零 ...

  6. MySQL 源码安装规范

    一 .目录规划 MySQL 的目录包括 base 目录和 data 目录,base 目录存放软件文件,每个版本的软件单 独一个目录,例如/usr/local/mysql/mysql5.6.19.dat ...

  7. 基于Linux系统Samba服务器的部署

    1.基础信息 用 Internet 文件系统 CIFS(Common Internet File System)是适用于MicrosoftWindows 服务器和客户端的标准文件和打印机共享系统信息块 ...

  8. 20210823 数数,数树,鼠树,ckw的树

    考场 乍一看都不好做 仔细想想发现 T1 的绝对值特别好,轮流选剩余的最大/最小值就行了 T2 又要计数,直接想部分分,发现一个 sb 容斥就有 35ps(但数据锅了,只有 25pts) T3 什么玩 ...

  9. eclipse的C/C++开发搭建

    环境 宿主机:ubuntu 16.04 交叉编译:gcc-linaro-4.9-2014.11 ubuntu自带源 eclipse 安装(想使用新版直接跳过) 安装eclipse sudo apt-g ...

  10. MyBatis的多表查询笔记

    MyBatis的多表查询 随着学习的进步,需求的提高,我们在实际开发中用的最多的还是多表查询,就让我们一起学习MyBatis中的多表查询. 数据库准备 Class表 Student表 项目结构 这次使 ...