下载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")
}
初始化项目
[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节点解压镜像
[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部署
查看pod和服务信息
修改svc的type类型变成nodePort
[root@master 0607tz]# kubectl edit svc k8s-demo-svc
保存后再次查看,已经修改成功
查看svc标签
浏览器测试访问:
]]>需要创建目录(/tmp/healthy)查看到运行成功,持续监控pod状态,看到pod反复重启
使用 describe 命令查看详细 pod 信息,正常
创建yaml
运行并查看状态
查看详细events
创建yaml文件
运行并进行容器内操作
查看pod的restarts次数
查看pod之前未通过liveness的记录
运行deployment
使用describechakanhttp服务的endpoint
可以看到有4个地址
进入一个容器,删除index.html文件
再使用 describe 命令查看 endpoint
可以看到删除的pod地址已经从endpoint中移除
查看pod的详细信息,看到pod未通过探针检测
查看pod信息,kandaopod处于notready状态
]]>使用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:端口
创建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命令通过域名访问服务
要求: 2 副本,镜像类型 httpd
要求: 3副本,镜像类型 httpd
为dy的第一个pod和dy2的第一个pod打上标签tz=httpd01
查看容器的详细信息
查看端口信息,可以看到svc2的pod是要求所说的
创建一个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的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的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的,并输出信息
简介:使用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
[root@master deplofile]# kubectl apply -f nginx-dy.yaml
deployment.apps/nginx-dy created
查看详细信息、创建结果和replicaset
已经创建好:
编辑之前创建的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
复制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
[root@master deplofile]# kubectl rollout undo deployment nginx-dy --to-revision=2
可以看到已经回滚到了版本2
[root@master deplofile]# kubectl delete deployment nginx-dy
通过 yaml 文件创建一个 deployment,有如下要求:
[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
开始创建
编辑yaml文件
更新
复制v1版本yaml为v2版本,并修改镜像版本号
进行更新升级,看到版本已经升级到了latest