服务原理:
所有服务都是根据这个服务衍生或者变化出来,根服务----
服务感知后端靠标签 slelector 标签选择器
kubectl label pods web1 app=web
kubectl cluter-info dump | grep -i service-cluster-ip-range 服务ip取值范围
Service 管理:
创建服务:
---
kind: Service
apiVersion: v1
metadata:
name: mysvc
spec:
type: ClusterIP
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
解析域名:
创建后端应用:
[root@master ~]# vim myweb.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: web1
labels:
app: web # 服务靠标签寻找后端
spec:
containers:
- name: apache
image: myos:httpd
[root@master ~]# kubectl apply -f myweb.yaml
pod/web1 created
[root@master ~]# curl http://10.245.5.18
Welcome to The Apache.
负载均衡:
固定IP服务:
---
kind: Service
apiVersion: v1
metadata:
name: mysvc
spec:
type: ClusterIP
clusterIP: 10.245.1.80 # 可以设置 ClusterIP
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
# vim mysvc.yaml
---
kind: Service
apiVersion: v1
metadata:
name: mysvc
spec:
type: ClusterIP
clusterIP: 10.245.1.80 # 可以设置 ClusterIP
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
端口别名:
[root@master ~]# vim mysvc.yaml
---
kind: Service
apiVersion: v1
metadata:
name: mysvc
spec:
type: ClusterIP
clusterIP: 10.245.1.80
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: myhttp # 使用别名查找后端服务端口
[root@master ~]# kubectl apply -f mysvc.yaml
service/mysvc configured
[root@master ~]# vim myweb.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: web1
labels:
app: web
spec:
containers:
- name: apache
image: myos:httpd
ports: # 配置端口规范
- name: myhttp # 端口别名
protocol: TCP # 协议
containerPort: 80 # 端口号
NodePort:对外发布
云容器引擎:CCE 华为云搭建的K8S
端口范围:30000-32767之间
Ingress:
七层可以基于域名区分,把请求转发给服务,本身不提供服务,ingress只是一个路由,不提供服务.
# 资源对象模板
kubectl create ingress mying --class=nginx --rule=nsd.tedu.cn/*=mysvc:80 --dry-run=client -o yaml
自定义请求头
循环上传镜像到harbor
[root@master dashboard]# docker images|while read i t _;do
[[ "${t}" == "TAG" ]] && continue
[[ "${i}" =~ ^"harbor:443/".+ ]] && continue
docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
docker push harbor:443/plugins/${i##*/}:${t}
docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
done
这段脚本在 Docker 环境中执行,主要做了以下几件事:
-
列出所有的 Docker 镜像 (
docker images
)。 -
对于每一个镜像,读取其 REPOSITORY(仓库名)和 TAG(标签)。
-
跳过所有 TAG 为 "TAG" 的镜像。
-
跳过所有 REPOSITORY 以 "harbor:443/" 开头的镜像。
-
对于剩余的镜像,执行以下操作:
- 给该镜像添加一个新的标签(
docker tag
),新的标签格式为 "harbor:443/plugins/原镜像名:原标签"。 - 将新标签的镜像推送到 harbor:443 这个 Docker 仓库(
docker push
)。 - 删除本地存储的原标签和新标签的镜像(
docker rmi
)。
- 给该镜像添加一个新的标签(
这个脚本的主要目的是将本地的一些 Docker 镜像推送到另一个 Docker 仓库(harbor:443),并且在推送之后删除本地的这些镜像。注意,这个脚本可能会删除本地的一些重要镜像,所以在执行之前需要确保这些镜像不再需要,或者已经做好了备份。
此外,这个脚本假设 "harbor:443" 这个仓库已经配置好,并且 Docker 客户端有权限向其中推送镜像。如果没有配置好,或者没有权限,docker push
命令将会失败。
另外,docker rmi
命令在删除镜像时并不会询问确认,所以如果误删除了重要的镜像,可能会导致数据丢失。因此,在执行这个脚本之前,一定要确保你了解它的作用,并且已经做好了必要的准备。
Web管理插件:
发布服务:
---
kin: Service
apiVersion: v1
metaata:
labels:
k8s-app: kubernetes-ashboard
name: kubernetes-ashboard
namespace: kubernetes-ashboard
spec:
type: NoePort
ports:
- port: 443
noePort: 30443
targetPort: 8443
selector:
k8s-app: kubernetes-ashboard
服务账户与权限:
创建服务账号:
---
kind: ServiceAccount
apiVersion: v1
metadata:
name: kube-admin
namespace: kubernetes-dashboard
获取taoken:
角色与鉴权:
获取列表:多个资源对象 单一资源对象,属性
补丁:局部更新 更新是全部更新