k8s-----------YAML&harbor

2023-05-16

目录

  • 概述
  • 使用YAML文件创建资源
    • 1、查看资源版本的标签
    • 2、创建yaml文件测试
  • Pod
    • 1、特点
    • 2、pod容器分类
    • 3、镜像拉取策略
  • 部署harbor
    • 1、登录harbor私有仓库
    • 2、下载Tomcat镜像进行推送
    • 3、推送

概述

Kubernetes支持YAML和JSON格式创建资源对象

  • JSON格式用于接口之间消息的传递
  • YAML格式用于配置和管理
    YAML是一种简洁的非标记性语言
    语法格式
  • 缩进标识层级关系
  • 不支持制表符缩进,使用空格缩进
  • 通常开头缩进两个空格
  • 字符后缩进一个空格,如冒号,逗号,短横杆等
  • “—”表示YAML格式,一个文件的开始
  • “#”表示注释

使用YAML文件创建资源

1、查看资源版本的标签

在写yaml文件中第一个就要先写版本标签,类似于dockerfile的FROM一样

[root@localhost ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

2、创建yaml文件测试

1)创建目录

mkdir demo

2)创建nginx-deploymet.yaml文件

[root@localhost ~]# cd demo/
[root@localhost demo]# vim nginx-deployment.yaml
apiVersion: apps/v1					#apiVersion:语法关键字,注意大小写。apps/v1:版本标签
kind: Deployment					#资源类型:deployment控制器
metadata:							#资源的元数据
  name: nginx-deployment			#定义资源的名称,在同一个namespace中必须唯一
  labels:							#定义资源的标签 
    app: nginx
spec:								#定义容器属性
  replicas: 3						# 定义副本数量
  selector:							#选择器
    matchLabels:					#匹配标签
      app: nginx					#匹配模板名称
  template:							#模板
    metadata:
      labels:
        app: nginx
    spec:
      containers:					#定义容器
      - name: nginx					# -:表示参数,容器名与标签名要相同
       image: nginx:1.15.4			# 容器使用的镜像以及版本
       ports:
       - containerPort: 80			#定义容器对外的端口

3)使用yaml文件创建资源

[root@master01 demo]# kubectl create -f nginx-deployment.yaml 

4)查看资源

[root@master01 demo]# kubectl get pods

5)发布
5-1、创建nginx-service.yaml文件

[root@localhost demo]# vim nginx-service.yaml

apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
   targetPort: 80  
  selector:
    app: nginx

拓展:
port
port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service
nodePort
nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service。
targetPort
targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
containerPort
containerPort是pod内部容器的端口,targetPort映射到containerPort。
在这里插入图片描述
5-2、使用nginx-service.yaml文件创建service资源(对外提供访问)

[root@localhost demo]# kubectl create -f nginx-service.yaml 
service/nginx-service created

5-3、查看service资源

[root@localhost demo]# kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        13d
nginx-service   NodePort    10.0.0.225   <none>        80:47722/TCP   23s

拓展:
自动测试命令的正确性,但是并不执行创建,个人理解就是检测命令是否正确

[root@localhost demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-deployment created (dry run)

查看生成yaml格式

[root@localhost demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml

查看生成的yaml格式并导出
[root@localhost demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml > my-deployment.yaml
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.

查看生成json格式

[root@localhost demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json

将现有的资源生成模板导出

[root@localhost demo]# kubectl get deploy/nginx --export -o yaml

保存到文件中

[root@localhost demo]# kubectl get deploy/nginx --export -o yaml > my-deploy.yaml

查看字段帮助信息

[root@localhost demo]# kubectl explain pods.spec.containers

Pod

1、特点

  • 最小部署单元
  • 一组容器的集合
  • 一个Pod中的容器共享网络命名空间
  • Pod是短暂的

2、pod容器分类

infrastructure container 基础容器

  • 维护整个Pod网络空间
  • node节点操作
  • 查看容器的网络
  • 每次创建Pod时候就会创建,与Pod对应的,对于用户是透明的
    initcontainers 初始化容器
  • 先于业务容器开始执行,原先Pod中容器是并行开启,现在进行了改进
    container 业务容器
  • 并行启动

3、镜像拉取策略

  • IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
  • Always:每次创建Pod都会重新拉取一次镜像
  • Never:Pod永远不会主动拉取这个镜像
    • 例1:
[root@localhost demo]# kubectl edit deployment/nginx			#edit:配置控制器
spec:
      containers:
      - image: nginx:latest
        imagePullPolicy: Always									#Always:每次创建Pod都会重新拉取一次镜像
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
  • 例2:
[root@localhost ~]# cd demo/
[root@localhost demo]# vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: nginx
      image: nginx
      imagePullPolicy: Always
      command: [ "echo", "SUCCESS" ]
[root@localhost demo]# kubectl create -f pod1.yaml 
pod/mypod created
[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS             RESTARTS   AGE
mypod                             0/1     CrashLoopBackOff   2          49s

失败的状态的原因是因为命令启动冲突
删除 command: [ "echo", "SUCCESS" ]
同时更改一下版本
image: nginx:1.14
删除原有的资源

[root@localhost demo]# kubectl delete -f pod1.yaml 
pod "mypod" deleted

更新资源

[root@localhost demo]# kubectl apply -f pod1.yaml 
pod/mypod created
[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
mypod                             1/1     Running   0          34s

查看分配节点

[root@localhost demo]# kubectl get pods -o wide
NAME                              READY   STATUS    RESTARTS   AGE    IP            NODE              NOMINATED NODE
mypod                             1/1     Running   0          118s   172.17.88.3   192.168.241.4   <none>

在任意node节点使用curl 查看头部信息

[root@localhost ~]# curl -I 172.17.88.3
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Wed, 12 Feb 2020 04:42:42 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: "5c0692e1-264"
Accept-Ranges: bytes

部署harbor

部署请参照hanbor私有仓库部署

node节点配置连接私有仓库(注意后面的逗号要添加)
[root@hzh ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://9it5um2j.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.241.8"]
}

1、登录harbor私有仓库

[root@localhost ~]# docker login 192.168.241.8
Username: admin  
Password:     //输入密码Harbor12345
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2、下载Tomcat镜像进行推送

[root@localhost ~]# docker pull tomcat

3、推送

3-1、打标签

[root@localhost ~]# docker tag tomcat 192.168.241.80/hzh/tomcat

3-2、推送

[root@localhost ~]# docker push 192.168.241.8/hzh/tomcat

3-3、node节点下载tomcat镜像

docker pull tomcat:8.0.52
[root@localhost demo]# vim tomcat-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-tomcat
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      containers:
      - name: my-tomcat
        image: docker.io/tomcat:8.0.52
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31111
  selector:
    app: my-tomcat

[root@localhost demo]# kubectl get pods,deploy,svc
NAME                                  READY   STATUS    RESTARTS   AGE
pod/my-tomcat-57667b9d9-nklvj         1/1     Running   0          10m
pod/my-tomcat-57667b9d9-wllnp         1/1     Running   0          10m
pod/mypod                             1/1     Running   1          12h
pod/nginx-7697996758-75shs            1/1     Running   1          2d10h
pod/nginx-7697996758-b7tjw            1/1     Running   1          2d10h
pod/nginx-7697996758-jddc5            1/1     Running   1          2d10h
pod/nginx-deployment-d55b94fd-4px2w   1/1     Running   1          36h
pod/nginx-deployment-d55b94fd-899hz   1/1     Running   1          36h
pod/nginx-deployment-d55b94fd-d7fqn   1/1     Running   1          36h

NAME                                     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/my-tomcat          2         2         2            2           10m
deployment.extensions/nginx              3         3         3            3           2d10h
deployment.extensions/nginx-deployment   3         3         3            3           36h

NAME                    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
service/kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP          15d
service/my-tomcat       NodePort    10.0.0.167   <none>        8080:31111/TCP   10m
service/nginx-service   NodePort    10.0.0.225   <none>        80:47722/TCP     36h

如果遇到处于Terminating状态的无法删除的资源如何处理

[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS        RESTARTS   AGE
my-tomcat-57667b9d9-nklvj         1/1     Terminating   0          10h
my-tomcat-57667b9d9-wllnp         1/1     Terminating   0          10h

种情况下可以使用强制删除命令:

kubectl delete pod [pod name] --force --grace-period=0 -n [namespace]

[root@localhost demo]# kubectl delete pod my-tomcat-57667b9d9-nklvj --force --grace-period=0 -n default
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "my-tomcat-57667b9d9-nklvj" force deleted

[root@localhost demo]# kubectl delete pod my-tomcat-57667b9d9-wllnp --force --grace-period=0 -n default
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "my-tomcat-57667b9d9-wllnp" force deleted

[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
mypod                             1/1     Running   1          23h
nginx-7697996758-75shs            1/1     Running   1          2d21h
nginx-7697996758-b7tjw            1/1     Running   1          2d21h
nginx-7697996758-jddc5            1/1     Running   1          2d21h
nginx-deployment-d55b94fd-4px2w   1/1     Running   1          47h
nginx-deployment-d55b94fd-899hz   1/1     Running   1          47h
nginx-deployment-d55b94fd-d7fqn   1/1     Running   1          47h

3-4、node01上操作(之前登陆过harbor仓库的节点)

#镜像打标签
[root@localhost ~]# docker tag tomcat:8.0.52 192.168.241.8/hzh/tomcat
#上传镜像到harbor
[root@localhost ~]# docker push 192.168.241.8/hzh/tomcat
#查看登陆凭据
[root@localhost ~]# cat .docker/config.json |base64 -w 0
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy41IChsaW51eCkiCgl9Cn0=

[root@localhost demo]# vim registry-pull-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: registry-pull-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy41IChsaW51eCkiCgl9Cn0=
type: kubernetes.io/dockerconfigjson

#创建secret资源
[root@localhost demo]# kubectl create -f registry-pull-secret.yaml 
secret/registry-pull-secret created
#查看secret资源
[root@localhost demo]# kubectl get secret
NAME                   TYPE                                  DATA   AGE
default-token-zztl5    kubernetes.io/service-account-token   3      9d
registry-pull-secret   kubernetes.io/dockerconfigjson        1      26s

3-5、创建资源从harbor中下载镜像

[root@localhost demo]# vim tomcat-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-tomcat
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: my-tomcat
        image: 192.168.241.8/hzh/tomcat
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31111
  selector:
    app: my-tomcat

[root@localhost demo]# kubectl create -f tomcat-deployment.yaml 

#私有仓库中的镜像被下载了2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s-----------YAML&harbor 的相关文章

随机推荐

  • Linux find命令详解

    find命令 xff1a 快速查找数据信息 find 查找范围 条件01 a 条件02 a 条件03 根据多个多个条件查找数据 xff08 多个条件是并且关系 xff09 find 查找范围 条件01 o 条件02 o 条件03 根据多个多
  • TIME_WAIT过多故障,如何解决?

    1 time wait的作用 1 xff09 可靠地实现TCP全双工连接的终止 在进行关闭连接四次挥手协议时 xff0c 最后的ACK是由主动关闭端发出的 xff0c 如果这个最终的ACK丢失 xff0c 服务器将重发最终的FIN xff0
  • 作业管理-----操作系统

    浅谈作业管理 摘要 作业的概念及作业的提交方式 xff1a 作业是用户在一次解题或事务处理过程中要求计算机所作工作的集合 一个作业进入系统到运行结束 xff0c 一般要经历 后备 执行 完成 三种状态 为了管理和调度作业 xff0c 系统为
  • python network

    call the sync function after 2 seconds t 61 threading Timer 2 self sync t start 为什么TCP传输需要编码 send can not send a string
  • 多生产者---多消费者问题(PV操作的简单例题)

    多生产者 多消费者问题 xff08 PV操作的简单例题 xff09 在引入生产者消费者问题前 xff0c 先要介绍几个知识点 1 临界区的相关问题 临界区是指每个进程访问临界资源的那段程序 临界资源是指每次只允许一个进程的访问的资源 2 P
  • 视频号视频文案怎么写,视频号第一条文案怎么写(新手必看)国仁网络资讯

    视频号文案怎么写 xff0c 为什么有些人在只做短视频的时候 xff0c 他的视频就会被很多人浏览 xff0c 观看次数都是上万 xff0c 甚至更多 xff0c 而有些人的短视频视频的播放量就不会有人问津 xff0c 我们在制作短视频或者
  • 操作系统的概念、四个特征以及os的发展和分类

    计算机系统概述 1 操作系统的概念2 操作系统的四个特征3 操作系统的发展与分类 1 操作系统的概念 操作系统 xff08 Operating System xff0c OS xff09 是指控制和管理整个计算机系统的硬件和软件资源 xff
  • 【编程算法】跳跃游戏ⅠⅡⅢ(Python解法)

    写这篇文章源于之前4 10做的字节跳动的笔试 xff0c 第二道编程题就是跳跃游戏类 xff0c 可以说和牛客或者力扣上边的解题做法是完全一样的 xff0c 可惜当时我才刚开始学习算法 深入了解该类型后发现真的很有意思 xff0c 这篇文章
  • 【Java开发】 Spring 10 :Spring Boot 自动配置原理及实现

    用了这么久的 SpringBoot xff0c 我们再来回顾一下它 xff0c 本文介绍 Spring Boot 的自动配置 xff0c 这是它区别于 Spring 的最大的点 xff0c 本文的自动配置项目包含三个项目 xff0c 建议拉
  • MyBatis与MyBatisPlus的区别

    一 MyBatis Plus简介 1 1 什么是mybatis plus MyBatis Plus xff08 简称 MP xff09 是一个 MyBatis 的增强工具 xff0c 在 MyBatis 的基础上只做增强不做改变 xff0c
  • Spring 笔记

    Spring 笔记 1 Spring xff08 2021 1 27 xff09 1 1 简介 Spring xff1a 春天 gt 给软件行业带来了春天 xff01 2002 xff0c 首次推出了Spring框架的雏形 xff1a in
  • 妙用shell脚本画图形

    妙用shell脚本画图形 目录 妙用shell脚本画图形一 99乘法表二 输出1条直线三 画矩形四 左边直角三角形五 右侧直角三角形六 等腰三角形七 平行四边形八 梯形九 菱形 一 99乘法表 展示一 xff1a 展示二 xff1a 二 输
  • 搭建LNMP基础框架

    目录 一 编译安装Nginx服务二 编译安装MySQL服务三 编译安装PHP服务四 部署Discuz xff0c 社区论坛Web应用 一 编译安装Nginx服务 1 关闭防火墙 xff0c 将安装Nginx所需软件包传到 opt目录下 sy
  • 银河麒麟4.0.2二进制安装mysql5.7

    先查看银河麒麟的版本 root 64 idiom kylin1 cat etc kylin build Kylin 4 0 2 Build 20191024 一 下载二进制包 xff0c 并安装所需软件 root 64 idiom kyli
  • 使用shell脚本一键部署LNMP架构

    span class token comment bin bash span span class token comment 将需要的安装包传到 opt目录下 xff0c 并关闭防火墙 span systemctl stop firewa
  • Nginx优化与防盗链

    目录 一 隐藏版本号二 修改用户与组三 缓存时间四 日志分割五 连接超时六 更改进程数七 配置网页压缩八 配置防盗链九 fpm参数优化 一 隐藏版本号 可以使用Fiddler工具抓取数据包 xff0c 查看Nginx版本 也可以在Cento
  • MySQL索引、事务与存储引擎

    目录 一 MySQL索引1 索引的概念2 索引的作用3 创建索引的原则依据4 索引的分类和创建4 1 61 61 普通索引 61 61 4 2 61 61 唯一索引 61 61 4 3 61 61 主键索引 61 61 4 4 61 61
  • openstack基础知识

    目录 一 云计算1 什么是云计算2 云计算的特色3 云计算的三种使用方式1 xff09 公有云2 xff09 私有云3 xff09 混合云 4 云计算服务模型1 xff09 IaaS 基础架构即服务 2 xff09 PaaS xff08 平
  • openstack-keystone

    目录 一 keystone身份服务二 keystone的主要功能三 keystone相关概念四 keystone认证流程五 OpenStack Keystone组件部署步骤部署步骤 一 keystone身份服务 keystone xff08
  • k8s-----------YAML&harbor

    目录 概述使用YAML文件创建资源1 查看资源版本的标签2 创建yaml文件测试 Pod1 特点2 pod容器分类3 镜像拉取策略 部署harbor1 登录harbor私有仓库2 下载Tomcat镜像进行推送3 推送 概述 Kubernet