春风十里不如你 —— Taozi - 容器 https://www.xiongan.host/index.php/tag/%E5%AE%B9%E5%99%A8/ zh-CN Wed, 07 Jun 2023 22:56:55 +0800 Wed, 07 Jun 2023 22:56:55 +0800 【k8s】将Go服务上传到k8s https://www.xiongan.host/index.php/archives/215/ https://www.xiongan.host/index.php/archives/215/ Wed, 07 Jun 2023 22:56:55 +0800 admin 将Go服务发布到k8s集群

首先安装go环境

下载go的tar.gz包,可以前往阿里云镜像站go页面下载相应版本地址:https://mirrors.aliyun.com/golang/?spm=a2c6h.13651104.mirror-free-trial.1.75b41e57BOxyw5

然后下载到虚拟机中,并且解压到/usr/local/src中

//解压缩go包
[root@master ~]# tar -zxf go1.18.10.linux-amd64.tar.gz -C /usr/local/src
//添加环境变量
[root@master src]# vim /etc/profile
//添加如下:
export GOROOT=/usr/local/src
export PATH=$PATH:$GOROOT/bin
//保存退出后source一下
source /etc/profile
//查看是否成功
go version

创建源码文件

[root@master ~]# mkdir 0607tz
[root@master ~]# cd 0607tz/
[root@master 0607tz]# vim main.go
//编辑到文件中
package main

import (
        "net/http"

        "github.com/gin-gonic/gin"
)

func statusOKHandler(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"status": "success~welcome to study"})
}

func versionHandler(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"version": "v1.1版本"})
}

func main() {
        router := gin.New()
        router.Use(gin.Recovery())
        router.GET("/", statusOKHandler)
        router.GET("/version", versionHandler)
        router.Run(":8080")
}

Go mod初始化项目

初始化项目

[root@master 0607tz]# go mod init 0607tz
go: creating new go.mod: module 0607tz
go: to add module requirements and sums:
        go mod tidy
//成功初始化
//设置代理
[root@master 0607tz]# go env -w GOPROXY=https://goproxy.cn,direct
[root@master 0607tz]# go mod tidy
//构建源码
[root@master 0607tz]# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o k8s-demo main.go

68609962763

68609970371

创建镜像

编写dockerfile文件

[root@master 0607tz]# vim Dockerfile
FROM alpine
ADD k8s-demo /data/app/
WORKDIR /data/app/
CMD ["/bin/sh","-c","./k8s-demo"]

构建镜像

[root@master 0607tz]# docker build -t taozheng/k8sdemo:v1 .

68610002587

打包镜像,传到k8s工作节点

[root@master 0607tz]# docker save -o k8sdemo.tar.gz taozheng/k8sdemo:v1 
[root@master 0607tz]# scp k8sdemo.tar.gz node:/root/
k8sdemo.tar.gz                                100%   16MB  68.0MB/s   00:00
//在node节点解压镜像

68610036977

创建deployment的yaml文件

[root@master 0607tz]# vim k8s.yaml
//k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo
  namespace: default
  labels:
    app: k8s-demo
    cy: taozheng
spec:
  selector:
    matchLabels:
      app: k8s-demo
  replicas: 4
  template:
    metadata:
      labels:
        app: k8s-demo
    spec:
      containers:
      - image: taozheng/k8sdemo:v1
        imagePullPolicy: IfNotPresent
        name: k8s-demo
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          limits:
            cpu: 100m
            memory: 100Mi
          requests:
            cpu: 50m
            memory: 50Mi
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 10
          timeoutSeconds: 3
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 10
          timeoutSeconds: 2

创建go的服务

[root@master 0607tz]# vim gosvc.yaml
kind: Service
apiVersion: v1
metadata:
  name: k8s-demo-svc
  namespace: default
  labels:
    app: k8s-demo
    cy: taozheng
spec:
  ports:
    - name: api
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: k8s-demo

k8s部署

68610144309

查看pod和服务信息

68610148691

修改svc的type类型变成nodePort

[root@master 0607tz]# kubectl edit svc k8s-demo-svc

68610160469

保存后再次查看,已经修改成功

68610172769

查看svc标签

68610189875

浏览器测试访问:

68610205900

68610208689

]]>
0 https://www.xiongan.host/index.php/archives/215/#comments https://www.xiongan.host/index.php/feed/tag/%E5%AE%B9%E5%99%A8/
【Docker】k8s健康检查 https://www.xiongan.host/index.php/archives/212/ https://www.xiongan.host/index.php/archives/212/ Sun, 28 May 2023 12:05:24 +0800 admin 健康检查

使用存活探针

创建使用 execaction 模式的存活探针 pod 的 yaml 文件。

68489166457

需要创建目录(/tmp/healthy)查看到运行成功,持续监控pod状态,看到pod反复重启

68489177496

使用 describe 命令查看详细 pod 信息,正常

68489215771

创建使用 http 存活探针的 pod 的 yaml 文件。

创建yaml

68489270782

运行并查看状态

68489266877

查看详细events

68489274944

创建使用 tcp 存活探针的 pod 的 yaml,模板采用 httpd 容器镜像。

创建yaml文件

68489334782

运行并进行容器内操作

68489330745

查看pod的restarts次数

68489340633

查看pod之前未通过liveness的记录

68489347800

就绪探针

创建 http 的 deployment 的 yaml 文件,其中配置 readiness 探针。

运行deployment

68489537126

68489538966

使用describechakanhttp服务的endpoint

68489544567

可以看到有4个地址

进入一个容器,删除index.html文件

68489549710

再使用 describe 命令查看 endpoint

68489553113

可以看到删除的pod地址已经从endpoint中移除

查看pod的详细信息,看到pod未通过探针检测

68489560281

查看pod信息,kandaopod处于notready状态

68489564469

]]>
0 https://www.xiongan.host/index.php/archives/212/#comments https://www.xiongan.host/index.php/feed/tag/%E5%AE%B9%E5%99%A8/
【k8s】service服务和job服务 https://www.xiongan.host/index.php/archives/208/ https://www.xiongan.host/index.php/archives/208/ Wed, 17 May 2023 13:35:50 +0800 admin Service服务发现

使用Service

使用Service实验使用的目录病创建后端的httpd-Dy

[root@master servicefile]# vim httpd-dy.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: httpd
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
        ports:
        - containerPort: 80

部署Deployment并查看信息

68428286502

创建httpd-service.yaml文件

[root@master servicefile]# vim httpd-service.yaml

68428302420

创建service并查看该信息(下kubernetes服务是系统服务)

68428311268

测试服务可用性,通过curl命令查看服务是否正常

[root@master servicefile]# curl 10.102.124.67:8080

68428339308

可以删除刚刚创建的服务

68428345193

创建httpd-expose.yaml,并部署

[root@master servicefile]# vim httpd-expose.yaml
kind: Service
apiVersion: v1
metadata:
  name: httpd-svc
spec:
  type: NodePort
  selector:
    app: httpd
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80
    nodePort: 30144

68428366522

使用跳板机浏览器登录,查看node节点ip:端口

68428375684

使用DNS

创建client.yaml,创建一个客户端pod,测试DNS功能

[root@master servicefile]# vim client.yaml
kind: Pod
apiVersion: v1
metadata:
  name: clientpod
spec:
  containers:
    - name: clientpod
      image: busybox:1.28.3
      args:
      - /bin/sh
      - -c
      - sleep 30000

创建并进入Pod命令行

[root@master servicefile]# kubectl apply -f client.yaml

使用nslookup命令查看服务域名,wget命令通过域名访问服务

68428417383

实训任务

创建deployment1

要求: 2 副本,镜像类型 httpd

68428612091

68428608656

创建deployment2

要求: 3副本,镜像类型 httpd

68428614089

68428616050

创建 service1,service1 后端为 deployment1 和 deployment2 中所有 pod。

68428621914

68428623761

创建 service2,service2 后端为 deployment1 中的第一个 pod 和 deployment2 中的第一个pod

为dy的第一个pod和dy2的第一个pod打上标签tz=httpd01

68428650498

68428651581

68428665013

68428668963

查看容器的详细信息

68428682792

查看端口信息,可以看到svc2的pod是要求所说的

68428673602

DeamonSet 与 Job

使用DaemonSet

创建一个Daemonset的yaml文件,并运行

[root@master servicefile]# vim DS-nginx.yaml
kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: nginx-daemonset
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

68429120276

查看daemonset的pod信息位置

68429141307

删除pod,查看daemonset的自动恢复功能

68429156829

查看到已经恢复好了

68429158434

使用Job

创建Job的yaml文件

[root@master servicefile]# vim pi-job.yaml
kind: Job
apiVersion: batch/v1
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

创建Job并查看运行状态,他运行完毕后自动关闭了

68429246585

68429247721

查看他的运行结果

68429253813

使用CronJob

创建CronJob的yaml文件,设置每一分钟运行一次返回一次hello

[root@master servicefile]# vim CJ-hello.yaml
kind: CronJob
apiVersion: batch/v1beta1
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernets cluster-tz123
          restartPolicy: OnFailure

运行cronjob,查看运行情况

68429293265

查看pod的状态已经完成

68429294371

68429299912

可以查看到运行cronjob后,每隔一分钟就会创建新的pod的,并输出信息

实训任务

创建一个 DaemonSet

  1. 包含两个 pod
  2. 镜像为 nginx

创建一个job,用于输出helloworld

创建一个 cronjob,在每日的 xx 小时 xx 点输出 helloworld。

删除本次实验创建 DaemonSet,Job 和 CronJob。

]]>
0 https://www.xiongan.host/index.php/archives/208/#comments https://www.xiongan.host/index.php/feed/tag/%E5%AE%B9%E5%99%A8/
【K8s】下的kubectl的Deployment部署Nginx https://www.xiongan.host/index.php/archives/205/ https://www.xiongan.host/index.php/archives/205/ Wed, 10 May 2023 21:00:59 +0800 admin 部署Nginx服务

简介:使用Deployment实现其滚动更新管理。

创建 Deployment

在 master 节点创建/labfile/deployfile 目录,用于保存配置文件。后续创建deployment 的 yaml 文件保存在此处。

[root@master ~]# mkdir labfile
[root@master ~]# cd labfile/
[root@master labfile]# mkdir deplofile
[root@master labfile]# cd deplofile/
[root@master deplofile]# vim nginx-dy.yaml
//以下内容为deployment文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dy
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

部署该 nginx-dy

[root@master deplofile]# kubectl apply -f nginx-dy.yaml 
deployment.apps/nginx-dy created

查看详细信息、创建结果和replicaset

68368221905

68368214323

已经创建好:

68368227777

弹性伸缩 Deployment

编辑之前创建的nginx-dy.yaml,将副本数量修改5

68368234327

应用变更后的yaml文件

[root@master deplofile]# kubectl apply -f nginx-dy.yaml 
deployment.apps/nginx-dy configured
[root@master deplofile]# kubectl get pod

68368242410

滚动升级 deployment

复制ng原版为两个新版本

[root@master deplofile]# cp nginx-dy.yaml nginx-dy-v2.yaml 
[root@master deplofile]# cp nginx-dy.yaml nginx-dy-v3.yaml

68368254157

68368256811

进行滚动更新

[root@master deplofile]# kubectl apply -f nginx-dy-v2.yaml --record

查看更新状态,上为更新前版本

68368327387

查看replicaset,看到一个新的,里面有5个pod,原有的pod不存在了

68368337301

查看deployment更新事件

68368335839

更新到v3版本

[root@master deplofile]# kubectl apply -f nginx-dy-v3.yaml --record

68368352563

查看deployment的更新记录

[root@master deplofile]# kubectl rollout history deployment nginx-dy

68368370547

查看历史版本 2 的详细信息

[root@master deplofile]# kubectl rollout history deployment nginx-dy --revision=2

68368375317

回滚到历史版本2

[root@master deplofile]# kubectl rollout undo deployment nginx-dy --to-revision=2

68368385037

可以看到已经回滚到了版本2

删除deployment

[root@master deplofile]# kubectl delete deployment nginx-dy

68368392541

实训

查看deployment信息

68368444955

ymal文件搭建httpd

通过 yaml 文件创建一个 deployment,有如下要求:

  1. 使用 httpd:2.4
  2. 4副本
[root@master deplofile]# vim httpd-v1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-dy
  labels:
    app: httpd
spec:
  replicas: 4
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2.4
        ports:
        - containerPort: 8080

开始创建

68368496033

将上面创建的deployment删除一个pod,变成副本3

编辑yaml文件

更新

68368512413

升级该 deployment 的镜像版本至 latest。

复制v1版本yaml为v2版本,并修改镜像版本号

68368559406

进行更新升级,看到版本已经升级到了latest

68368561618

寻找该 deployment 中各个 pod 运行节点,deployment 创建的时间戳(Creation Timestamp)。

68368575679

]]>
0 https://www.xiongan.host/index.php/archives/205/#comments https://www.xiongan.host/index.php/feed/tag/%E5%AE%B9%E5%99%A8/