K8S 进阶部分

  • 1. Deployment 部署
    • 1.1 自愈能力
    • 1.2 多副本
    • 1.3 扩容、缩容
    • 1.4 滚动更新
    • 1.5 版本回退
    • 1.6 工作负载
  • 2. Service 网络
    • 2.1 ClusterIP 模式
    • 2.2 NodePort 模式
  • 3. Ingress 网关
    • 3.1 安装
    • 3.2 实战
      • 3.2.1 apply一个yaml文件
      • 3.2.2 解析yaml为架构图
      • 3.2.3 域名访问
    • 3.3 Ingress的高级功能
      • 3.3.1 路径重写
      • 3.3.2 流量限制
  • 4. 存储抽象
    • 4.1 环境准备
    • 4.2 PV 和 PVC
      • 4.2.1 创建 PV 池
      • 4.2.2 PVC 创建与绑定
    • 4.3 配置 ConfigMap(推荐)
      • 4.3.1 配置文件准备
      • 4.3.2 yaml文件创建Pod
      • 4.3.3 进入容器查看效果
      • 4.3.4 图解
    • 4.4 Secret
  • 5. 总结
    • 5.1 工作负载
    • 5.2 服务
    • 5.3 配置和存储

1. Deployment 部署

1.1 自愈能力

强大的自愈能力

# 1、先删除之前的pod
[root@cluster-master /]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
myapp   2/2     Running   3          3d9h
[root@cluster-master /]# kubectl delete pod myapp
pod "myapp" deleted# 2、创建一个Pod
kubectl create deployment mytomcat --image=tomcat:9.0
[root@cluster-master /]# kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
mytomcat-77bcdc77bf-kd6qm   1/1     Running   0          2m38s

测试delete掉这个pod:

左边的是使用watch -n 1 kubectl get pod 一秒自动执行一次这个命令,我们发现,我们欲删除的这个这个后缀为kd6qm的mytomcat,确实是被删掉了,但Deployment又帮我们重新启动了一个,后缀不同的pod。强大的自愈能力。

如果我们真想删除这个Pod,其实是要把这个Deployment删除

[root@cluster-master /]# kubectl get deploy
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
mytomcat   1/1     1            1           11m[root@cluster-master /]# kubectl delete deploy mytomcat
deployment.apps "mytomcat" deleted[root@cluster-master /]# kubectl get pod
No resources found in default namespace.

1.2 多副本

通过Deployment创建五个tdengine副本(因为我在学TDengine)

1、键入kubectl create deployment my-deptd01 --image=tdengine/tdengine --replicas=5

2、键入kubectl get pod -owide可以查看各个节点上assigned的任务

3、当node2节点宕机,deployemnt会自动的在其它节点再启动对应的个数服务,又是极好的自愈能力故障转移

当一个节点宕机,K8S不会立即重新在新的节点部署,会有一个阈值,监测五分钟或者多久没有脸上,就认定为下线。

4、rebootshutdown都测试了,只展示shutdown的,reboot的很容易理解

  • 看到node2在集群里已经不是ready了

  • 同时,deployemnt在其他节点创建新的pod

  • 查看到已经都OK了,宕机的三个几点都在node1上重新创建了。

下面这个展示的是reboot的效果图

1.3 扩容、缩容

# 扩缩容
kubectl scale deploy/my-deptd01 --replicas=6
kubectl scale deploy/my-deptd01 --replicas=2# yaml方式实现
kubectl edit deploy my-deptd01  # 会给我们展示yaml文件,找replicas进行修改来实现# 可视化的也比较简单

1.4 滚动更新

图解

需要更新为V2版本,但是不可以停机,会一直有流量进来,先启动一个V2的Pod,把流量接到V2上,这个Pod接受之后,再把V1的对应的Pod下掉(具体是删除还是隐藏?因为后面还要回滚)

“启动一个杀一个”

命令实现

# 版本更新
kubectl set image deploy/my-dep01 nginx=nginx:1.16.1  --record# 我们可以通过两种方式来查看这个滚动更新的状态
kubectl get pod -w
watch -n 1 kubectl get pod

1.5 版本回退

# 查看过去的版本
kubectl rollout history deploy/my-dep01#查看某个历史详情
kubectl rollout history deploy/my-dep01 --revision=2#回滚(回到上次)
kubectl rollout undo deploy/my-dep01#回滚(回到指定版本)
kubectl rollout undo deploy/my-dep01 --to-revision=2

1.6 工作负载

官网介绍工作负载资源

Deployment:无状态应用部署,比如微服务、提供多副本。

StateFulSet:有状态应用部署,比如数据库之类的,redis、mysql。可以固定IP,可以保证一个Pod宕掉,重启之后还是之前的IP地址,提供稳定的存储、网络等功能。

DaemonSet:守护型应用部署,比如日志收集组件,每一个机器都只能运行一份。

Job/CronJob:定时任务部署,比如垃圾清理组件,可以在指定的时间运行,比如每晚两点清理垃圾。

2. Service 网络

问题和需求

我们创建启动了三个nginx副本,三个Pod,有各自的IP,当我们前端部署的时候,需要配置一个API的地址,只能配置一个IP地址,但是,如果我们配置的这个IP地址所在的Pod宕机了,我们是不是还要去修改这个API地址,很麻烦。

为此我们使用Serivce,它可以配置某次Deployment部署的一个总IP,对外暴露一个IP,将一组Pod公开。

图解

2.1 ClusterIP 模式

命令

# 针对我们这个deploy,我们对外暴露8000端口,对应源Pod的80端口
[root@cluster-master ~]# kubectl expose deploy my-dep01 --port=8000 --target-port=80
service/my-dep01 exposed[root@cluster-master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP    4d14h
my-dep01     ClusterIP   10.96.32.173   <none>        8000/TCP   8s   # 暴露的8000端口[root@cluster-master ~]# curl 10.96.32.173:8000# 这样子,访问到这个IP,Service会自动分配到这三个Pod,自动实现负载均衡。
# 这个IP集群内部可以任意使用

yaml方式

# 我们查看一下创建这个service的yaml文件
[root@cluster-master ~]# kubectl edit service my-dep01# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service  # 类型是service
metadata:creationTimestamp: "2022-07-23T09:23:55Z"labels:app: my-dep01name: my-dep01   # 这个service的名字namespace: defaultresourceVersion: "77046"uid: 0dc7adf5-ebd2-4355-8fb1-cb04f5e00605
spec:clusterIP: 10.96.32.173  # 这个service暴露的统一Pod的IPclusterIPs:- 10.96.32.173ports:- port: 8000      # 对外暴露的端口protocol: TCPtargetPort: 80  # 源Pod的端口selector:app: my-dep01   # 对应的是我们选择的哪一个deploy ,这很重要,我们每次通过deployment创建一个Pod都会有个标签,记录是哪一个deployment创建的PodsessionAffinity: Nonetype: ClusterIP   # 集群内部可访问
status:loadBalancer: {}# 针对上面的selector里的app是哪里来的,下面做了解释
[root@cluster-master ~]# kubectl get pod --show-labels
NAME                        READY   STATUS    RESTARTS   AGE   LABELS
my-dep01-75c8465dbd-4h75m   1/1     Running   0          25m   app=my-dep01,pod-template-hash=75c8465dbd
my-dep01-75c8465dbd-b58zm   1/1     Running   0          24m   app=my-dep01,pod-template-hash=75c8465dbd
my-dep01-75c8465dbd-jpksr   1/1     Running   0          25m   app=my-dep01,pod-template-hash=75c8465dbd
my-dep01-75c8465dbd-rnk2k   1/1     Running   0          24m   app=my-dep01,pod-template-hash=75c8465dbd# 除了IP访问的方式,我们还可以通过域名来访问(服务名.命名空间.svc)
root@my-tomcat-5987455b6b-8q4kx:/usr/local/tomcat# curl my-dep01.default.svc:8000
<head>
<title>Welcome to nginx!</title>
</head>
<h1>Welcome to nginx!</h1>
-------- 略 -----------
# 注意:这个方式只能在其他的Pod里面进行访问,而不能在宿主机节点访问。(--type=CLusterIp)
# 回顾:我们之前在基础部分创建dashboard的时候,就是把type: ClusterIP 改为 type: NodePort,之后就可以在公网下访问了

2.2 NodePort 模式

默认的暴露service方式是ClusterIP,只有集群内部可以访问。

我们使用NodePort方式,可以让集群外部也可以访问。

# 在暴露的时候使用这种方式
kubectl expose deploy my-dep01 --port=8000 --target-port=80 --type=NodePort# 或者把之前的ClusterIP换成NodePort
[root@cluster-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP    4d14h
my-dep01     ClusterIP   10.96.32.173   <none>        8000/TCP   35m[root@cluster-master ~]# kubectl edit svc my-dep01
service/my-dep01 edited[root@cluster-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          4d14h
my-dep01     NodePort    10.96.32.173   <none>        8000:32135/TCP   36m# 可以看到,不仅有一个8000端口,是我们自己写的,还有一个32135端口,这个是K8S给我们配置的,每一个Pod都一样,随机生成的这个范围是 30000-32767

测试访问

# 测试ClusterIP(集群内部访问)
[root@cluster-master ~]# curl 10.96.32.173:8000
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and# 测试公网IP访问(集群外部访问)
C:\Users\whirl\Desktop>curl 192.76.116.202:32135<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and

PS

我们注意到这些用于集群内部访问的IP都是10.96.0.0/16的,这是我们之前在初始化主节点的时候配置的**–service-cidr**=10.96.0.0/16 \

同时,这些Pod的网络都是192.168.0.0/16 这也是初始化主节点的时候配置的**–pod-network-cidr**=192.168.0.0/16

3. Ingress 网关

Ingress是Service的统一网关入口,Service是Pod的统一入口。

通常,会有很多个服务,service A、 service B、service C,他们都在同一层,用的IP就是10.96.0.0/16下面的子网,K8S统一管理,由ingress来决定不同的访问路径调用不同的服务,底层是一个nginx

3.1 安装

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml# 修改镜像
vi deploy.yaml
# 将image的值改为如下值:(这是尚硅谷雷丰阳老师阿里云仓库里的ingress地址)
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/ingress-nginx-controller:v0.46.0[root@cluster-master ~]# kubectl apply -f deploy.yaml
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
configmap/ingress-nginx-controller created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
service/ingress-nginx-controller-admission created
service/ingress-nginx-controller created
deployment.apps/ingress-nginx-controller created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created
serviceaccount/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created# 检查安装的结果
[root@cluster-master ~]# kubectl get pod,svc -n ingress-nginx
NAME                                            READY   STATUS              RESTARTS   AGE
pod/ingress-nginx-admission-create-b96tw        0/1     ContainerCreating   0          15s
pod/ingress-nginx-admission-patch-9725j         0/1     CrashLoopBackOff    1          15s
pod/ingress-nginx-controller-65bf56f7fc-ggndz   0/1     ContainerCreating   0          15sNAME                                         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx-controller             NodePort    10.96.39.227   <none>        80:30278/TCP,443:32006/TCP   15s
service/ingress-nginx-controller-admission   ClusterIP   10.96.62.203   <none>        443/TCP                      15s# 最后别忘记把svc暴露的端口要放行

测试集群外部访问 Success:

问题:yaml文件下不下来?

解决

# 排查一下创建过程发生了什么
[root@cluster-master ~]# kubectl get pod -n ingress-nginx
NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-b96tw        0/1     Completed   0          8m50s
ingress-nginx-admission-patch-9725j         0/1     Completed   2          8m50s
ingress-nginx-controller-65bf56f7fc-ggndz   1/1     Running     0          8m50s# 查看Event事件
kubectl describe pod ingress-nginx-controller-65bf56f7fc-ggndz -n ingress-nginx
# 如果那个镜像说pull 失败了,就自己去docker pull

自己也可以去更改镜像源,因为官方没有上传到Docker-hub,注意版本的对应关系

解决国内k8s的ingress-nginx镜像无法正常pull拉取问题_文杰@的博客-CSDN博客

3.2 实战

3.2.1 apply一个yaml文件

(学习一下Deployment配置的格式)

apiVersion: apps/v1
kind: Deployment   # 来一个deployment
metadata:name: hello-server
spec:replicas: 2   # 两个副本selector:matchLabels:app: hello-servertemplate:metadata:labels:app: hello-serverspec:containers:- name: hello-serverimage: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/hello-serverports:- containerPort: 9000
---
apiVersion: apps/v1
kind: Deployment    # 来一个deployment
metadata:labels:app: nginx-demoname: nginx-demo
spec:replicas: 2      # 两个副本selector:matchLabels:app: nginx-demotemplate:metadata:labels:app: nginx-demospec:containers:- image: nginxname: nginx
---
apiVersion: v1
kind: Service  # 来一个service服务
metadata:labels:app: nginx-demoname: nginx-demo    # 服务的名字
spec:selector:app: nginx-demoports:- port: 8000protocol: TCPtargetPort: 80
---
apiVersion: v1
kind: Service  # 配置服务
metadata:labels:app: hello-servername: hello-server   # 服务的名字
spec:selector:app: hello-serverports:- port: 8000protocol: TCPtargetPort: 9000

3.2.2 解析yaml为架构图

展示刚才的部署效果

3.2.3 域名访问

apiVersion: networking.k8s.io/v1
kind: Ingress      # 配置了一个转发的类型
metadata:name: ingress-host-bar  # 不重名即可
spec:ingressClassName: nginx    rules:- host: "hello.xw.com"  # 多个rule多个这样的 - hosthttp:paths:- pathType: Prefixpath: "/"backend:service:name: hello-server  # 指定给哪个service来完成port:number: 8000- host: "demo.xw.com"http:paths:- pathType: Prefixpath: "/nginx"  # 把请求会转给下面的服务,下面的服务一定要能够处理这个路径,不然就是404backend:service:name: nginx-demo  # 指定给哪个service来完成port:number: 8000

需要进入任意一个nginx的Pod里面,然后写入文件,命名就是nginx(上面path里面的目录名称),不然就是404

测试访问

# 查看端口
[root@cluster-master ~]# kubectl get svc  -n ingress-nginx
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
ingress-nginx-controller  NodePort  10.96.39.227  <none>  80:30278/TCP,443:32006/TCP   42m
ingress-nginx-controller-admission  ClusterIP 10.96.62.203 <none>     443/TCP         42m# 配置的是30278端口# 接着我们在我们的Windows配置hosts映射
192.76.116.201 hello.xw.com  demo.xw.com

以下两个是ingress官网给的高级功能,加注解Annotations

3.3 Ingress的高级功能

3.3.1 路径重写

刚才的配置demo.xw.com修改一下

主要是在metadata里面加了一个annotations,然后在path进行了修改

apiVersion: networking.k8s.io/v1
kind: Ingress      # 配置了一个转发的类型
metadata:name: ingress-host-bar  # 不重名即可
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:  # 高级部分,加注解nginx.ingress.kubernetes.io/rewrite-target: /$2  # 你要重写的部分name: ingress-host-bar
spec:ingressClassName: nginxrules:- host: "hello.xw.com"http:paths:- pathType: Prefixpath: "/"backend:service:name: hello-serverport:number: 8000- host: "demo.xw.com"http:paths:- pathType: Prefixpath: "/nginx(/|$)(.*)"  # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404backend:service:name: nginx-demo  # java,比如使用路径重写,去掉前缀nginxport:number: 8000

进入任意一个nginx容器,输入nginx文件echo xiaowei > nginx

虽然输入的是/nginx,但是ingress自动给我们截掉了,就是相当于/了,这样转发到其他的Pod的时候,就是直接访问它们的根路径了。就会显示这个起始欢迎页面。

3.3.2 流量限制

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-limit-rate   # 这个ingress的名称annotations:nginx.ingress.kubernetes.io/limit-rps: "1"  # 限制访问频率
spec:ingressClassName: nginxrules:- host: "hh.xw.com"  # 这里新的host,记得需要在Windows的hosts里面加一个哈http:paths:- pathType: Exact #精确匹配,只有haha.xw.com的才会被限制,haha.xw.com:30278/sad都不会被限制path: "/"backend:service:name: nginx-demoport:number: 8000

如果浏览器访问频率过快:

4. 存储抽象

之前,我们在Docker里面,文件挂载到宿主机上,但在K8S里面的话,挂载是挂载到当前的node里面,然后如果这个node节点宕机,那么由于K8S的故障转移能力,会自动的在其他node节点创建一个Pod,这个时候,会新起一个挂载的目录,这个目录是不包含之前宕掉的节点的目录里面的数据的。

所以有了新的方法,存储系统,可以选择很多种方式来存储,K8S是开放的,我们这里使用**NFS(网络文件系统)**来完成这个存储的任务,也可以选择其他的方式。

4.1 环境准备

大致步骤:安装工具,配置目录,主节点是服务节点,其他节点去同步这个主节点的数据

# 在所有节点安装
yum install -y nfs-utils# 在主节点暴露一个nfs的目录
mkdir -p /nfs/data
# *表示目录下的所有文件,然后括号里的是可以让同步的目录也可以执行rw的操作
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
systemctl enable rpcbind --now
systemctl enable nfs-server --now# 使配置生效
exportfs -r# 在从节点展示目标IP下可供同步的目录
[root@cluster-node1 ~]# showmount -e 192.76.116.201
Export list for 192.76.116.201:
/nfs/data *# 同样的,创建目录,然后将服务器上的目录共享到本机
mkdir -p /nfs/data
mount -t nfs 192.76.116.201:/nfs/data /nfs/data

测试环境 Success

# 在主节点
echo "hello nfs server" > /nfs/data/test.txt#  在从节点查看
[root@cluster-node1 ~]# cd /nfs/data/
[root@cluster-node1 data]# ls
test.txt
[root@cluster-node1 data]# cat test.txt
hello nfs server

原生方式挂载

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx-pv-demoname: nginx-pv-demo
spec:replicas: 2selector:matchLabels:app: nginx-pv-demotemplate:metadata:labels:app: nginx-pv-demospec:containers:- image: nginxname: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlnfs:server: 192.76.116.201path: /nfs/data/nginx-pv

测试访问 Success

PS:存在一个问题:

如果我们把这次部署deploy删掉了,但是数据挂载的目录并不会被删除,时间长了之后,会有很多的垃圾文件。怎么办呢?为此我们引入PV和PVC

4.2 PV 和 PVC

PV:Persistent Vloume 持久卷,将应用需要持久化的数据保存到指定位置

PVC:Persistent Volume Claim 持久卷声明,声明需要使用的持久卷规格

4.2.1 创建 PV 池

我们这里使用的是静态供应,后面还要学习动态供应

# 先在主节点的/nfs/data下创建三个目录备用
mkdir 01 02 03

创建我们需要的 PV

apiVersion: v1
kind: PersistentVolume   # 创建持久卷
metadata:name: pv01-10m
spec:capacity:storage: 10m   # 静态创建10M的空间accessModes:- ReadWriteManystorageClassName: nfsnfs:path: /nfs/data/01    # 挂载的目录server: 192.76.116.201
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv02-1gi
spec:capacity:storage: 1g   # g要小写accessModes:- ReadWriteManystorageClassName: nfsnfs:path: /nfs/data/02server: 192.76.116.201
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv03-3gi
spec:capacity:storage: 3gaccessModes:- ReadWriteManystorageClassName: nfsnfs:path: /nfs/data/03server: 192.76.116.201

创建成功

[root@cluster-master ~]# kubectl apply -f deploy-pv.yaml
persistentvolume/pv01-10m unchanged
persistentvolume/pv02-1gi created
persistentvolume/pv03-3gi created
[root@cluster-master ~]# kubectl get pv
NAME    CAPACITY ACCESS MODES RECLAIM POLICY STATUS   CLAIM   STORAGECLASS   REASON   AGE
pv01-10m   10m     RWX            Retain           Available           nfs                     5m10s
pv02-1gi   8M         RWX            Retain           Available           nfs                     54s
pv03-3gi   5M         RWX            Retain           Available           nfs                     54s
# 可以看到目前都是“可用”的状态
# 注意在你申请的时候,首先要确保你当前的节点的空间足够,我虚拟机报错空间不足了,												

Kubernetes进阶部分学习笔记相关推荐

  1. vn.py全实战进阶课程学习笔记(零)

    目录 写在前面 MySQL数据库配置 安装mysq 创建数据库 vnpy数据库配置 rqdata数据服务配置 申请rqdata试用权限 vnpy参数配置 simnow仿真环境配置 准备账号 接口登录 ...

  2. Kubernetes 1.18学习笔记

    文章目录 一.Kubernetes 概述和架构 1.kubernetes 基本介绍 2.Kubernetes 功能 3.Kubernetes 架构组件 4.Kubernetes 核心概念 5.Kube ...

  3. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  4. Android推送进阶课程学习笔记

    今天在慕课网学习了Android进阶课程推送的server端处理回执的消息 . 这集课程主要介绍了,当server往client推送消息的时候,client须要发送一个回执回来确认收到了推送消息才算一 ...

  5. 【c语言】进阶篇学习笔记

    C语言高级特性 C语言的高级部分.指针板块,需要理解计算机内存模型,需要格外注意. 函数 程序帮我们补充好的main函数: int main() { //这是定义函数... } 程序的入口点就是mai ...

  6. Kubernetes 和 Kubeflow 学习笔记

    Kubernetes Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制.多租户应用支撑能力.透明的服务注册和发现机制.內建智能负载均衡器.强大 ...

  7. 慕课网《Flutter从入门到进阶》学习笔记一

    文章目录 第1章 学习指南 1-1 课程介绍与学习指南 1-2 项目需求分析.技术分解 第2章 Flutter学习经验 2-1 Android开发者如何快速上手Flutter开发 2-2 iOS开发者 ...

  8. Kubernetes In Action 学习笔记 Chapter3,4,5 (一)Pod,副本机制,守护进程与Job

    Pod background K8s的基本调度单位,一个Pod可以运行一个或者以上数量的容器. 我们知道Docker的一个container实际上是一个进程,那么每一个container只能运行一个进 ...

  9. 慕课网《Flutter从入门到进阶》学习笔记二

    文章目录 Flutter必备Dart基础:Dart快速入门 学习资料 4-1 Flutter之Dart概述 4-2 Flutter之Dart常用数据类型(数字.类型转换) 4-3 Flutter之Da ...

最新文章

  1. Yii学习笔记【3】
  2. SAP PM入门系列33 - IP16 维修计划报表
  3. 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档,以博客形式发表在博客园...
  4. vue-socket.io跨域问题的解决方法
  5. 全球最大AI商业展会开幕,这家老牌巨头担当中国唯一代表
  6. 文件上传下载流程设计
  7. qt中树形控件QTreeWidget的项点击后获取该项的文本
  8. MongoDb和LINQ:如何汇总和加入集合
  9. 深入理解空指针(C++)
  10. 利用DELL的OMSA监控服务器的温度
  11. 详解百度地图API之地图操作
  12. 百度开源的 71 个项目,太牛逼了!
  13. Android音乐播放器demo
  14. SpringBoot 整合 kaptcha + redis 实现 图形验证码登录
  15. 如何转换图片格式?建议收藏这两个方法
  16. 第三方app实现微信登录功能
  17. ios客户端发现_华为爱奇艺手机活动开发总结
  18. python所需各种库(.whl)文件网址,不用下载其它运行库,直接pip install .....whl
  19. 计算机软件系统配置,电脑配置修改_电脑配置修改软件
  20. Webpack构建vue项目-记录

热门文章

  1. ensp配置ssh后无法远程连接问题
  2. 小米回应“被意大利机构罚款2176万元”;Win 12要来?曝微软调整Windows迭代节奏;Vite 3.0 发布|极客头条
  3. 网页设置通栏后,缩小页面有一部分不显示
  4. 2022.12.28雷神加速器更新问题
  5. 解决Eclipse中无法直接使用sun.misc.BASE64Encoder及sun.misc.BASE64Decoder的问题
  6. 【一】分布式微服务架构体系详解——分布式系统的问题
  7. 2021年期货公司分类排名一览
  8. ZCMU--5154: 体育运动
  9. 要想提高工作效率,请拒绝做这 7 种事
  10. 邮箱“邮件备份”功能详解【申请企业邮箱】