春风十里不如你 —— Taozi - 容器 https://www.xiongan.host/index.php/tag/%E5%AE%B9%E5%99%A8/ 【k8s】将Go服务上传到k8s https://www.xiongan.host/index.php/archives/215/ 2023-06-07T22:56:55+08:00 将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创建镜像编写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 .打包镜像,传到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节点解压镜像创建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-demok8s部署查看pod和服务信息修改svc的type类型变成nodePort[root@master 0607tz]# kubectl edit svc k8s-demo-svc保存后再次查看,已经修改成功查看svc标签浏览器测试访问: 【Docker】k8s健康检查 https://www.xiongan.host/index.php/archives/212/ 2023-05-28T12:05:24+08:00 健康检查使用存活探针创建使用 execaction 模式的存活探针 pod 的 yaml 文件。需要创建目录(/tmp/healthy)查看到运行成功,持续监控pod状态,看到pod反复重启使用 describe 命令查看详细 pod 信息,正常创建使用 http 存活探针的 pod 的 yaml 文件。创建yaml运行并查看状态查看详细events创建使用 tcp 存活探针的 pod 的 yaml,模板采用 httpd 容器镜像。创建yaml文件运行并进行容器内操作查看pod的restarts次数查看pod之前未通过liveness的记录就绪探针创建 http 的 deployment 的 yaml 文件,其中配置 readiness 探针。运行deployment使用describechakanhttp服务的endpoint可以看到有4个地址进入一个容器,删除index.html文件再使用 describe 命令查看 endpoint可以看到删除的pod地址已经从endpoint中移除查看pod的详细信息,看到pod未通过探针检测查看pod信息,kandaopod处于notready状态 【k8s】service服务和job服务 https://www.xiongan.host/index.php/archives/208/ 2023-05-17T13:35:50+08:00 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并查看信息创建httpd-service.yaml文件[root@master servicefile]# vim httpd-service.yaml创建service并查看该信息(下kubernetes服务是系统服务)测试服务可用性,通过curl命令查看服务是否正常[root@master servicefile]# curl 10.102.124.67:8080可以删除刚刚创建的服务创建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使用跳板机浏览器登录,查看node节点ip:端口使用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命令通过域名访问服务实训任务创建deployment1要求: 2 副本,镜像类型 httpd创建deployment2要求: 3副本,镜像类型 httpd创建 service1,service1 后端为 deployment1 和 deployment2 中所有 pod。创建 service2,service2 后端为 deployment1 中的第一个 pod 和 deployment2 中的第一个pod为dy的第一个pod和dy2的第一个pod打上标签tz=httpd01查看容器的详细信息查看端口信息,可以看到svc2的pod是要求所说的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查看daemonset的pod信息位置删除pod,查看daemonset的自动恢复功能查看到已经恢复好了使用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并查看运行状态,他运行完毕后自动关闭了查看他的运行结果使用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,查看运行情况查看pod的状态已经完成可以查看到运行cronjob后,每隔一分钟就会创建新的pod的,并输出信息实训任务创建一个 DaemonSet包含两个 pod镜像为 nginx创建一个job,用于输出helloworld创建一个 cronjob,在每日的 xx 小时 xx 点输出 helloworld。删除本次实验创建 DaemonSet,Job 和 CronJob。 【K8s】下的kubectl的Deployment部署Nginx https://www.xiongan.host/index.php/archives/205/ 2023-05-10T21:00:59+08:00 部署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已经创建好:弹性伸缩 Deployment编辑之前创建的nginx-dy.yaml,将副本数量修改5应用变更后的yaml文件[root@master deplofile]# kubectl apply -f nginx-dy.yaml deployment.apps/nginx-dy configured [root@master deplofile]# kubectl get pod滚动升级 deployment复制ng原版为两个新版本[root@master deplofile]# cp nginx-dy.yaml nginx-dy-v2.yaml [root@master deplofile]# cp nginx-dy.yaml nginx-dy-v3.yaml进行滚动更新[root@master deplofile]# kubectl apply -f nginx-dy-v2.yaml --record查看更新状态,上为更新前版本查看replicaset,看到一个新的,里面有5个pod,原有的pod不存在了查看deployment更新事件更新到v3版本[root@master deplofile]# kubectl apply -f nginx-dy-v3.yaml --record查看deployment的更新记录[root@master deplofile]# kubectl rollout history deployment nginx-dy查看历史版本 2 的详细信息[root@master deplofile]# kubectl rollout history deployment nginx-dy --revision=2回滚到历史版本2[root@master deplofile]# kubectl rollout undo deployment nginx-dy --to-revision=2可以看到已经回滚到了版本2删除deployment[root@master deplofile]# kubectl delete deployment nginx-dy实训查看deployment信息ymal文件搭建httpd通过 yaml 文件创建一个 deployment,有如下要求:使用 httpd:2.44副本[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开始创建将上面创建的deployment删除一个pod,变成副本3编辑yaml文件更新升级该 deployment 的镜像版本至 latest。复制v1版本yaml为v2版本,并修改镜像版本号进行更新升级,看到版本已经升级到了latest寻找该 deployment 中各个 pod 运行节点,deployment 创建的时间戳(Creation Timestamp)。