使用Minikube+docker+harbor+k8s自动化部署 @by_TWJ

目录

  • 1. 开始
    • 1.1. 环境
    • 1.2. 测试的git仓库
    • 1.3. 离线文件
    • 1.4. 安装docker
    • 1.5. 安装docker-compose(非必要)
    • 1.6. 安装Jenkins
    • 1.7. 安装harbor
    • 1.8. 允许docker通过http访问私有仓库
    • 1.9. 修改/etc/hosts,追加自定义域名
    • 1.10. 安装Minikube
  • 2. minikube使用driver=docker方式
  • 3. minikube使用driver=none方式
    • 3.1. 安装minikube前提
      • 3.1.1. cri-docker安装
      • 3.1.2. containernetworking-plugins 安装
      • 3.1.3. 安装 conntrack-tools
      • 3.1.4. 安装crictl
      • 3.1.5. 安装which
      • 3.1.6. 安装socat
      • 3.1.7. 禁用swap
    • 3.2. 安装成功后
      • 3.2.1. 安装时的问题
      • 3.2.2. 设置别名 kubectl
      • 3.2.3. 安装minikube-dashboard
      • 3.2.4. 给apiservice配置代理外网访问(含minikube-dashboard)
  • 4. 外部端口之间通讯
    • 4.1. 使用 port-forward(临时用)
    • 4.2. 使用Pod提供的外部访问端口
    • 4.3. 使用 ingress提供的外部访问端口转发
      • 4.3.1. 安装ingress
      • 4.3.2. 例子1:
      • 4.3.3. 例子2:
  • 5. 内部端口之间通讯
    • 5.1. Pod 不会与Pod之间通讯
    • 5.2. service之间通讯
      • 5.2.1. 例子
  • 6. 挂载卷
  • 7. StatefulSet
  • 8. 补充语句
  • 9. 部署项目
    • 9.1. 部署springboot项目
      • 9.1.1. 流程
  • 9. 术语

1. 开始

建议使用driver=none方式

1.1. 环境

系统:archlinux
k8s版本:1.30.0

1.2. 测试的git仓库

https://gitee.com/alvis128/demo.git
https://gitee.com/alvis128/demo2.git

1.3. 离线文件

链接:https://pan.baidu.com/s/1G0mhdUhd0HmphZnlva2prg 
提取码:ue70

1.4. 安装docker

# 安装docker
sudo pacman -S docker
# 配置自启动服务,并立即启动docker
sudo systemctl enable --now docker
# 赋予当前用户docker权限
sudo usermod -aG docker $USER
newgrp docker

docker 配置源
/etc/docker 目录可能不存在,需要创建,所以运行命令:mkdir /etc/docker

nano /etc/docker/daemon.json
----------------------
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}
---------------------
# 更新daemon
systemctl daemon-reload
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker

1.5. 安装docker-compose(非必要)

# 安装docker-compose
sudo pacman -S docker-compose

1.6. 安装Jenkins

默认启动端口是:8090

sudo pacman -S jenkins
# 查看启动状态
systemctl status jenkins 
# 若没有启动,则运行命令启动
systemctl start jenkins# 赋予当前用户(jenkins)docker权限
sudo usermod -aG docker jenkins
newgrp docker

额外:
jenkins切换用户执行

# 修改
nano /usr/lib/systemd/system/jenkins.service
-------------
user=tavion
-------------
chown -R tavion:tavion /usr/lib/jenkins
chown -R tavion:tavion /var/cache/jenkins
chown -R tavion:tavion /var/log/jenkins

1.7. 安装harbor

第一步、 下载并解压
github仓库:https://github.com/goharbor/harbor/releases

# 下载并解压
wget https://github.com/goharbor/harbor/releases/download/v2.11.0-rc1/harbor-offline-installer-v2.11.0-rc1.tgz
tar zxvf harbor-offline-installer-v2.11.0-rc1.tgz
# 上面解压后,会生成harbor目录,然后我们进入目录
cd harbor

第二步、配置harbor.yml

# 复制并改名
cp harbor.yml.tmpl harbor.yml
# 第二步、修改harbor.yml文件
nano harbor.yml
----------------------
# 注释https
# 修改hosthome为本地ip地址,也可以改为域名
----------------------

修改harbor.yml文件,我们测试环境不需要用https,所以注释掉,例如:

# 修改hostname
hostname: tavion.comhttp:port: 8180
# 下面注释https
# https related config
# https:# https port for harbor, default is 443# port: 8181# The path of cert and key files for nginx# certificate: /home/vagrant/harbor/secret/ca.crt# private_key: /home/vagrant/harbor/secret/ca.key# enable strong ssl ciphers (default: false)# strong_ssl_ciphers: false(后面略)

第三步、修改/etc/hosts,追加自定义域名

echo "127.0.0.1 tavion.com" >> /etc/hosts

第四步、导入harbor的images包
如果不导入,harbor会联网下载包,很慢的

docker load -i harbor.v2.11.0.tar.gz

第五步、安装harbor

./install.sh

1.8. 允许docker通过http访问私有仓库

第一种:通过修改daemon.json 方式(不推荐,因为重启后,会被其他程序修改)


# 修改/etc/docker/daemon.json ,修改结果如下:
vi /etc/docker/daemon.json
-----------------------------------------------{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"],"insecure-registries": ["http://tavion.com:8380"]
}
-----------------------------------------------
# 刷新daemon
systemctl daemon-reload
systemctl restart docker
# 查看docker是否正常运行,没问题
systemctl status docker

第二种: 通过在docker.service启动时添加例外

# 通过查看状态,找到docker服务执行类
systemctl status docker
# 修改服务
sudo nano /usr/lib/systemd/system/docker.service
------------------------------------------
# 修改成如下,在末尾添加例外 --insecure-registry=tavion.com
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=tavion.com
------------------------------------------

1.9. 修改/etc/hosts,追加自定义域名

前面如果运行了,这里就不用运行了

echo "127.0.0.1 tavion.com" >> /etc/hosts

1.10. 安装Minikube

打开网址:https://minikube.sigs.k8s.io/docs/start/
根据提示安装Minikube

例如linux系统安装步骤:

# 下载并安装minikube程序
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64# 使用minikube部署k8s,安装很慢,因为网络问题,如下就是成功例子
minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=docker --memory=2048mb  --image-mirror-country='cn'
---------------------------------------------
* minikube v1.33.1 on Arch  (vbox/amd64)
* Using the docker driver based on user configuration
* Using image repository registry.cn-hangzhou.aliyuncs.com/google_containers
* Using Docker driver with root privileges
* Starting "minikube" primary control-plane node in "minikube" cluster
* Pulling base image v0.0.44 ...
! minikube was unable to download registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.44, but successfully downloaded docker.io/kicbase/stable:v0.0.44 as a fallback image
* Creating docker container (CPUs=2, Memory=2048MB) ...
* Preparing Kubernetes v1.30.0 on Docker 26.1.1 ...- Generating certificates and keys ...- Booting up control plane ...- Configuring RBAC rules ...
* Configuring bridge CNI (Container Networking Interface) ...
* Verifying Kubernetes components...- Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
* Enabled addons: storage-provisioner, default-storageclass
* kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
---------------------------------------------
# 添加别名
alias kubectl="minikube kubectl --"
# 查看安装状态,如果安装成功,是全部都ready的,如下就是成功例子
kubectl get po -A
---------------------------------------------
NAMESPACE              NAME                                        READY   STATUS    RESTARTS       AGE
kube-system            coredns-7c445c467-5g2sl                     1/1     Running   1 (103s ago)   10m
kube-system            etcd-minikube                               1/1     Running   1 (108s ago)   11m
kube-system            kube-apiserver-minikube                     1/1     Running   1 (98s ago)    11m
kube-system            kube-controller-manager-minikube            1/1     Running   1 (108s ago)   11m
kube-system            kube-proxy-vnc94                            1/1     Running   1 (108s ago)   10m
kube-system            kube-scheduler-minikube                     1/1     Running   1 (108s ago)   11m
kube-system            storage-provisioner                         1/1     Running   2 (108s ago)   11m
kubernetes-dashboard   dashboard-metrics-scraper-b5fc48f67-28bf9   1/1     Running   1 (108s ago)   9m23s
kubernetes-dashboard   kubernetes-dashboard-779776cb65-2nqw4       1/1     Running   2 (94s ago)    9m23s
----------------------------------------------

2. minikube使用driver=docker方式

minikube 创建一个minikube的docker(1)容器,里面也有一个docker(2),服务都在这个docker(2)里执行

有缺陷:如果要添加私有仓库,需要进入到docker(2)里修改,且重启minikube后,docker(2)的修改内容丢失,这里的修改内容指的是私有仓库。不推荐使用

这里略,不推荐使用

3. minikube使用driver=none方式

部署简单

minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'

3.1. 安装minikube前提

3.1.1. cri-docker安装

参考 https://mirantis.github.io/cri-dockerd/usage/install-manually/

  1. 下载二进制安装包
    打开网址,下载: https://github.com/Mirantis/cri-dockerd

下载后文件:cri-dockerd-0.3.14.amd64.tgz
解压: tar zxvf cri-dockerd-0.3.14.amd64.tgz

  1. 本地执行
git clone -b v0.3.14 --depth 1 https://github.com/Mirantis/cri-dockerd.git
  1. 进入cri-dockerd目录,并把二进制安装包cri-dockerd 放到cri-dockerd目录下

  2. 执行

install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd
install packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable --now cri-docker.socket

3.1.2. containernetworking-plugins 安装

参考 https://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver
查看版本:
https://github.com/containernetworking/plugins/releases

v1.5.0 为例

mkdir -p /opt/cni/bin
tar -xf cni-plugins-linux-amd64-v1.5.0.tgz -C /opt/cni/bin

3.1.3. 安装 conntrack-tools

pacman -S conntrack-tools

3.1.4. 安装crictl

sudo pacman -S crictl

3.1.5. 安装which

sudo pacman -S which

3.1.6. 安装socat

 pacman -S socat

3.1.7. 禁用swap

# 临时禁用
sudo swapoff -a
# 永久关闭
sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab

3.2. 安装成功后

3.2.1. 安装时的问题

minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'

这里一般都会有网络问题,如果失败,则重新安装。

# 删除后,重新安装
minikube delete 

你也可以从我网盘里拿到minikube start…的离线安装文件: minikube_cache.tar.gz

你可以放置到~/.minikube 如下,然后继续minikube start…

mv minikube_cache.tar.gz ~/.minikube
tar zxvf minikube_cache.tar.gzminikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'

3.2.2. 设置别名 kubectl

# 修改/etc/profile 在最后添加如下
alias kubectl="minikube kubectl --"# 更新
source /etc/profile

3.2.3. 安装minikube-dashboard

minikube dashboard# 配置代理
kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*' &
# 游览器访问:
http://tavion.com:45396/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/ingressclass?namespace=default

3.2.4. 给apiservice配置代理外网访问(含minikube-dashboard)

# 配置代理:这里我们配置后台执行,所以后面添加&: 
kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*' &

4. 外部端口之间通讯

4.1. 使用 port-forward(临时用)

# 配置映射外部端口# 查看Podskubectl get pod--------------------------------NAME                    READY   STATUS    RESTARTS   AGEdemo-79dfdd6f88-8c69f   1/1     Running   0          65m--------------------------------# 映射外部端口kubectl port-forward --address 0.0.0.0 demo-79dfdd6f88-8c69f 8190:8080# 游览器访问:curl http://localhost:8190/version

4.2. 使用Pod提供的外部访问端口

配置自定义的外部访问端口,需要在ports里添加hostPort外部访问端口

apiVersion: v1
kind: Pod
metadata:name: webapp labels:app: webapp 
spec:# hostNetwork: true  		# 网络模式选择为使用宿主机网络,即容器所有的端口都会自动映射到宿主机上containers:- name: webappimage: tomatports:- containerPort: 8080	# 容器的运行端口为 8080hostPort: 8081 		# 映射到宿主机的端口为 8081,如果上边设置了网络模式,则不需要加 hostPort# command: ['sh', '-c', 'echo The app is running! && sleep 3600']
minikube kubectl -- apply -f webapp-pod.yaml

4.3. 使用 ingress提供的外部访问端口转发

这种只提供80端口和443端口,内置nginx,通过nginx转发请求。如下:

4.3.1. 安装ingress

minikube addons enable ingress --images="KubeWebhookCertgenCreate=google_containers/kube-webhook-certgen:v20230407,KubeWebhookCertgenPatch=google_containers/kube-webhook-certgen:v20230407,IngressController=google_containers/nginx-ingress-controller:v1.8.1" --registries="IngressController=registry.cn-hangzhou.aliyuncs.com,KubeWebhookCertgenCreate=registry.cn-hangzhou.aliyuncs.com,KubeWebhookCertgenPatch=registry.cn-hangzhou.aliyuncs.com"

安装成功后,查看状态:


kubectl get pod -n ingress-nginx
----------------------------------
NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-29nfv        0/1     Completed   0          146m
ingress-nginx-admission-patch-5dmvr         0/1     Completed   1          146m
ingress-nginx-controller-77b5c5fcc6-wpgzf   1/1     Running     0          146m----------------------------------

4.3.2. 例子1:

kubectl get svc -n ingress-nginx -owide

demo-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: demo-ingressannotations:# 指定 Ingress Controller 的类型kubernetes.io/ingress.class: "nginx"# 指定我们的 rules 的 path 可以使用正则表达式nginx.ingress.kubernetes.io/use-regex: "true"# 连接超时时间,默认为 5snginx.ingress.kubernetes.io/proxy-connect-timeout: "600"# 后端服务器回转数据超时时间,默认为 60snginx.ingress.kubernetes.io/proxy-send-timeout: "600"# 后端服务器响应超时时间,默认为 60snginx.ingress.kubernetes.io/proxy-read-timeout: "600"# 客户端上传文件,最大大小,默认为 20mnginx.ingress.kubernetes.io/proxy-body-size: "10240m"# URL 重写nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: demo.tavion.com # 游览器通过域名访问,不能使用ip访问,ip访问会报404 找不到资源:http://demo.tavion.comhttp:paths:- pathType: Prefixpath: /    # 匹配路径backend:service:name: demo    # deployment的名称port:number: 8080    # deployment的端口
# 加入转发配置信息到ingress
minikube kubectl -- apply -f demo-ingress.yaml

4.3.3. 例子2:

在外网可以通过www1.westos.org访问myservice服务,也可以通过www2.westos.org访问nginx-svc服务

apiVersion: networking.k8s.io/v1betal
kind: Ingress
metadata:name: ingress-demo
spec:rules:- host:www1.westos.orghttp:paths:- path: /backend:serviceName: myserviceservicePort: 80- host: www2.westos.orghttp:paths:- path: /backend:serviceName: nginx-svcservicePort: 80

5. 内部端口之间通讯

k8s集群中三种IP(NodeIP、PodIP、ClusterIP)介绍

  • NodeIP:Node 节点的 IP 地址,即物理机(虚拟机)的 IP 地址。
  • PodIP:Pod 的 IP 地址,即 docker 容器的 IP 地址,此为虚拟 IP 地址。
  • ClusterIP:k8s 虚拟的 Service 的 IP 地址,此为虚拟 IP 地址。

5.1. Pod 不会与Pod之间通讯

5.2. service之间通讯

service之间是可以通讯的。
Service种类、类型(ClusterIP、NodePort、LoadBalancer、ExternalName)

配置方法:
配置自定义的外部访问端口,需要在ports里添加nodePort外部访问端口

apiVersion: v1
kind: Service 
metadata: name: webapp 
spec: type: NodePort		# 设置 Service 类型为 NodePortports: - port: 8080 			# 设置 Service 暴露的端口为 8080, 即8080(svc) <-> 80(pod)targetPort: 8080		# 设置 Pod 的端口为 8080nodePort: 30081 	# 设置 NodePort 的端口为 30081,即30081(NodePort) <-> 8080(svc) <-> 80(Pod) selector:app: webapp 
minikube kubectl -- apply -f webapp-svc.yaml
[tavion@tavion-m410 ~]$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
webapp       NodePort    10.100.227.225   <none>        8080:31155/TCP   12h
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          13h
[tavion@tavion-m410 ~]$ ^C
[tavion@tavion-m410 ~]$ curl http://localhost:31155/version
test-v3.1

5.2.1. 例子

服务demo 和 服务demo2

语法:http://[服务名].[namespace]:[端口]/

服务状态

[tavion@tavion-m410 k8s]$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
demo         NodePort    10.100.227.225   <none>        8080:31155/TCP   18h
demo2        NodePort    10.105.19.92     <none>        8080:30910/TCP   15m
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          18h

服务demo2 可以通过 http://demo.default:8080/ 访问demo

6. 挂载卷

K8S的存储系统从基础到高级又大致分为三个层次:普通Volume,Persistent Volume 和动态存储供应。

这里的挂载卷,是普通Volume

apiVersion: apps/v1
kind: Deployment
metadata:name: demo
spec:replicas: 3selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:containers:- name: demoimage: tavion.com:8380/repos/demo:${version}ports:- containerPort: 8080
#          volumeMounts: # 映射到docker容器的卷目录或文件
#            - name: nginx-volume-dir  # 映射的卷别名
#              mountPath: /var/log/nginx # 映射到容器的目录
#            - name: nginx-volume-file # 映射的卷别名
#              mountPath: /var/log/nginx/access2.log # 映射到容器的目录
#      volumes:  # 挂载系统的卷
#        - name: nginx-volume-dir  # 挂载的卷的别名
#          hostPath:
#            path: /path/on/host   # 挂载的卷路径
#        - name: nginx-volume-file # 挂载的卷的别名
#          hostPath:
#            path: /path/on/host/access2.log # 挂载的卷文件

7. StatefulSet

参考:https://blog.csdn.net/hguisu/article/details/124228252
StatefulSet 是用来管理有状态的服务。

什么叫有状态和无状态的服务?

  • 无状态是指该服务运行的实例不会在本地存储需要持久化的数据。
    举例:其实就是我们的springboot项目,等不需要保存数据到本地,可以随意扩容。
  • 有状态是指和无状态服务相比,它多了状态保存的需求。即有数据存储功能。
    举例:就像我们的一些消息队列、数据库等,需要数据存储功能。

那么有状态和无状态有什么优点呢?
实例数量:无状态服务可以有一个或多个实例,因此支持两种服务容量调节模式;有状态服务只能有一个实例,不允许创建多个 实例,因此也不支持服务容量调节模式。
存储卷:无状态服务可以有存储卷,也可以没有,即使有也无法备份存储卷里面的数据;有状态服务必须要有存储卷,并且在创建服务时,必须指定给该存储卷分配的磁盘空间大小。
数据存储:无状态服务运行过程中的所有数据(除日志和监控数据)都存在容器实例里的文件系统中,如果实例停止或者删除,则这些数据都将丢失,无法找回;而对于有状态服务,凡是已经挂载了存储卷的目录下的文件内容都可以随时进行备份,备份的数据可以下载,也可以用于恢复新的服务。但对于没有挂载卷的目录下的数据,仍然是无法备份和保存的,如果实例停止或者删除,这些非挂载卷里的文件内容同样会丢失。

那么创建StatefulSet需要怎么做?
在Deployment中,与之对应的服务是service,而在StatefulSet中与之对应的headless service。

所以,同样,我们也需要创建headless service

headless service,即无头服务,与service的区别就是它没有Cluster IP,解析它的名称时将返回该Headless Service对应的全部Pod的Endpoint列表。
除此之外,StatefulSet在Headless Service的基础上又为StatefulSet控制的每个Pod副本创建了一个DNS域名,这个域名的格式为:
$(podname).(headless server name)
FQDN:$(podname).(headless server name).namespace.svc.cluster.local

例子1、
第一步创建Headless Service

cat sts-web-svc.yaml 
---
apiVersion: v1
kind: Service
metadata:name: sts-web-svc
spec:selector:app: web-nginxports:- port: 80targetPort: 80clusterIP: None     # 设置无IP地址,这是headless service重点

第二步、创建StatefulSet

cat sts-web.yaml 
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: sts-webnamespace: default
spec:serviceName: sts-web-svc  # 关联SVC资源replicas: 2               # 副本数selector:matchLabels:            # 关联具有app=web-nginx标签的Podapp: web-nginxvolumeClaimTemplates:        # 卷申请模板 - metadata:name: www                # 卷申请模板名称spec:accessModes: ["ReadWriteOnce"] # 访问模式storageClassName: nfs          # 指定供应商,前提是需要存在此供应商resources:requests:storage: 1Gi               # 存储大小1Gtemplate:metadata:labels:app: web-nginxspec:containers:- name: web-nginximage: nginx:1.18.0imagePullPolicy: IfNotPresentports:- containerPort: 80name: webvolumeMounts:- name: www             # 指定卷申请模板名称mountPath: /usr/share/nginx/htmlstartupProbe:           # 启动探测tcpSocket:port: 80

8. 补充语句

访问pod容器,例如:

kubectl exec it mynginx -c tomcat -- sh
kubectl exec it mynginx sh

更新镜像

kubectl set image deployment my-tomcat tomcat=tomcat:10.1.11 --record

回退镜像

kubectl rollout history deploy my-tomcat

9. 部署项目

9.1. 部署springboot项目

https://gitee.com/alvis128/demo.git
https://gitee.com/alvis128/demo2.git

9.1.1. 流程

安装插件:verion number
在这里插入图片描述

重启jenkins
新建Item
在这里插入图片描述
配置拉取仓库
在这里插入图片描述
构造环境,添加版本信息
在这里插入图片描述
添加Build Steps操作
在这里插入图片描述
Build Steps 步骤选项:
在这里插入图片描述
Build Steps -1 ,编译,因为我是用gradle编译的,你们可能是maven
在这里插入图片描述
Build Steps -2 ,发布到harbor仓库中
在这里插入图片描述

Build Steps -3 ,使用k8s 部署springboot项目
在这里插入图片描述
保存后,然后运行BuildNow
在控制台查看日志
在这里插入图片描述

9. 术语

k8s 里面的一些术语:

  • deployment 部署项目,用来管理pod节点,可以控制pod节点启动、关闭、添加pod等等(部署)
  • pod 是服务的最小单位,每个pod里面都有一个docker。(服务)
  • service 是管理pod服务之间的通讯关系的,(网络方面)
  • ingress 是管理service服务之间的通讯关系(网络方面)

kubernetes里有三张不同的网络,每种IP地址,就代表一个不同的寻址空间:

  • Node IP:Node节点的IP地址
  • Pod IP:Pod的IP地址
  • Cluster IP:内部或集群内访问Service的IP地址
  • External IP是 为了解决如何从外部访问 service 服务的问题。

简写

  • service - svc
  • podes - po
    例如 : kubectl get svc 等同于 kubectl get service

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/342341.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端列表可滚动,可轮播

前端列表可滚动&#xff0c;可轮播 <ulclass"scroll-list"ref"scroll_List"mouseenter"cancelScroll()"mouseleave"autoScroll()"><liclass"list-item"v-for"(item,index) in tableData3":class"[…

eNSP学习——配置RIP的版本兼容、定时器和协议优先级

目录 主要命令 原理概述 实验内容 实验拓扑 实验目的 实验编址 实验步骤 1、基本配置 2、配置RIP协议的版本兼容 3、配置RIP的定时器 4&#xff0e;配置RIP协议优先级 需要eNSP各种配置命令的点击链接自取&#xff1a;华为&#xff45;NSP各种设备配置命令大全PDF版…

mysql中事务的简介

大家好。我们在日常开发过程中肯定都或多或少的用到过事务&#xff0c;而且在面试时&#xff0c;数据库的事务也是必问内容之一。今天我们就来说说mysql的事务。 为了方便我们下面内容的讲解&#xff0c;我们也先建立一个讲事务必用的表–account表&#xff0c;并在表中插入两…

CSS学习笔记之高级教程(五)

23、CSS 媒体查询 - 实例 /* 如果屏幕尺寸超过 600 像素&#xff0c;把 <div> 的字体大小设置为 80 像素 */ media screen and (min-width: 600px) {div.example {font-size: 80px;} }/* 如果屏幕大小为 600px 或更小&#xff0c;把 <div> 的字体大小设置为 30px …

Golang:使用Base64Captcha生成数字字母验证码实现安全校验

Base64Captcha可以在服务端生成验证码&#xff0c;以base64的格式返回 为了能看到生成的base64验证码图片&#xff0c;我们借助gin go get -u github.com/mojocn/base64Captcha go get -u github.com/gin-gonic/gin文档的示例看起来很复杂&#xff0c;下面&#xff0c;通过简…

区块链游戏(链游)安全防御:抵御攻击的策略与实践

一、引言 区块链游戏&#xff0c;或称为链游&#xff0c;近年来随着区块链技术的普及而迅速崛起。然而&#xff0c;如同其他任何在线平台一样&#xff0c;链游也面临着各种安全威胁。本文将探讨链游可能遭遇的攻击类型以及如何通过有效的策略和技术手段进行防御。 二、链游可…

怎么用PHP语言实现远程控制两路照明开关

怎么用PHP语言实现远程控制两路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制两路开关&#xff0c;两路开关可控制两路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…

LeetCode 热题 100 第56.合并区间

思路&#xff1a; class Solution {public int[][] merge(int[][] intervals) {if(intervals.length < 1) return intervals;List<int[]> res new ArrayList<>();Arrays.sort(intervals, (o1,o2) -> o1[0] - o2[0]);for(int[] interval : intervals){if(res…

科技赋能,无障碍出行的新纪元

在现代社会&#xff0c;公共设施的建设不仅是衡量城市文明程度的标尺&#xff0c;更是实现社会公平与包容的重要载体。对于盲人群体而言&#xff0c;一个完善的公共设施网络&#xff0c;意味着他们能够更加独立、自信地融入社会&#xff0c;享受与视力健全者同等的公共服务与便…

二叉树的顺序结构(堆的实现)

前言 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。 现实中我们通常把堆 ( 一种二叉树 ) 使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事&…

基于物理的分析模型,用于具有场板结构的GaN HEMT的输入、输出及反向电容

Physics-Based Analytical Model for Input, Output, and Reverse Capacitance of a GaN HEMT With the Field-Plate Structure&#xff08;TPE 17年&#xff09; 摘要 该论文提出了一种分析模型&#xff0c;用于描述带有场板结构的常开型AlGaN/GaN高电子迁移率晶体管&#x…

视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述

GA/T 1400协议主要应用于公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在城市的治安监控、交通管理、案件侦查等方面&#xff0c;GA/T 1400协议都发挥着重要作用。 以视频汇聚EasyCVR视频监控资源管理平台为例&#xff0c;该平台…

LINUX----进程替换,exec族函数

execl族函数的作用 exel族函数用于调用一个已经存在的可执行程序,将该程序的运行需要的代码区和数据区的数据覆盖原进程,这样就可以实现在一个进程中调度另一个进程. 简单实现一个小功能来看一看 mytest.c #include <stdio.h> #include <unistd.h>int main(){print…

海思Hi3519DV500方案1200万无人机吊舱套板

海思Hi3519DV500方案1200万无人机吊舱套板 Hi3519DV500 是一颗面向行业市场推出的超高清智能网络摄像头SoC。该芯片最高 支持四路sensor 输入&#xff0c;支持最高4K30fps 的ISP 图像处理能力&#xff0c;支持2F WDR、 多级降噪、六轴防抖、全景拼接、多光谱融合等多种传统图像…

【ssh命令】ssh登录远程服务器

命令格式&#xff1a;ssh 用户名主机IP # 使用非默认端口: -p 端口号 ssh changxianrui192.168.100.100 -p 1022 # 使用默认端口 22 ssh changxianrui192.168.100.100 然后输入密码&#xff0c;就可以登录进去了。

NSSCTF-Web题目5

目录 [SWPUCTF 2021 新生赛]error 1、题目 2、知识点 3、思路 [LitCTF 2023]作业管理系统 1、题目 2、知识点 3、思路 [HUBUCTF 2022 新生赛]checkin 1、题目 2、知识点 3、思路 [SWPUCTF 2021 新生赛]error 1、题目 2、知识点 数据库注入、报错注入 3、思路 首先…

【Python数据预处理系列】掌握数据清洗技巧:如何高效使用drop()函数去除不需要的列

目录 一、准备数据 二、使用drop函数去除掉指定列 在数据分析和预处理的过程中&#xff0c;经常会遇到需要从数据集中移除某些列的情况。本文将引导您了解如何使用drop函数高效地去除不需要的列&#xff0c;帮助您提升数据处理技能&#xff0c;确保您的数据集只包含对分析有价…

Systemd服务配置排坑-TasksMax参数

一、背景 由于产品是Java程序&#xff0c;之前都是通过封装的start.sh运行即可。但是出于架构调整&#xff0c;改换为Ansible进行自动化部署&#xff0c;同时改用Systemd service的方式来对程序进行管理。 但不知道为啥原因&#xff0c;使用systemctl启动这个程序&#xff0c;就…

The First项目报告:AI+元宇宙+链游,Ultiverse能否引发新一轮GameFi浪潮?

2 月 19 日&#xff0c;由AI 驱动的 Web3 游戏制作和发布一站式平台 Ultiverse 宣布上线 Ulti-Pilot&#xff0c;Ulti-Pilot 允许用户以零成本的方式获得积分、SOUL、和 Ultiverse 生态的其他游戏内资产。 链游赛道一直是Web3领域热议的话题&#xff0c;其数字资产天然契合加密…

七月份大理站、ACM独立出版、高录用稳检索,2024年云计算与大数据国际学术会议(ICCBD 2024)

【ACM独立出版 | 高录用 | EI核心检索稳定】 2024年云计算与大数据国际学术会议&#xff08;ICCBD 2024) 2024 International Conference on Cloud Computing and Big Data (ICCBD 2024) 一、重要信息 大会官网&#xff1a;www.iccbd.net &#xff08;点击投稿/参会/了解会…