test## 1. 一次K8S测试环境故障处理过程: ##

1. 故障描述:

   51放假期间公司停电,关掉所有k8s测试机器,包括3台k8s master,5台k8s node,3台ceph机器。放假来电之后启动k8s机器和所有的ceph机器;
开机之后,发现很多k8s服务无法启动,经过判断发现是ceph的存储问题。后续解决ceph存储osd节点down状态问题。但是发现依赖cephfs文件系统的pvc还是不能挂载。因为我们这个环境有两个storageClass,一个是RBD,一个是cephfs。 RBD是刚开始搭建的,因为是kubernetes集群默认提供的RBD控制器,所以配置简单,但是不支持多个主机同时读写的策略。cephfs文件系统的StorageClass可以支持多个主机同时读写,但是不足之处在于Kubernetes默认不支持cephfs存储控制器,所以需要用到第三方的cephfs控制器,才可以创建cephfs的StorageClass。最终也解决了cephfs文件系统的故障问题,K8S所有服务顺利启动,没有造成数据丢失;

2. 故障排查过程记录:

  2.1 确认ceph存储故障:

   启动k8s集群之后首先发现很多服务都没有自动启动成功,包括我们的一些公共组件,比如jenkins、prometheus、业务容器等。通过以下命令排查出存储故障:

kubectl describe pods -n kube-system jenkins-55c4dcb555-fwpcp
Events:Type     Reason       Age                    From                   Message----     ------       ----                   ----                   -------Warning  FailedMount  12m (x257 over 11h)    kubelet, 10.83.32.233  Unable to mount volumes for pod "jenkins-55c4dcb555-fwpcp_kube-system(8b5cda6f-6ffe-11e9-974d-480fcf482f56)": timeout expired waiting for volumes to attach or mount for pod "kube-system"/"jenkins-55c4dcb555-fwpcp". list of unmounted volumes=[jenkins-home]. list of unattached volumes=[plugins tmp jenkins-config plugin-dir secrets-dir jenkins-home jenkins-token-vb27p]

  然后我登录存储的管理机器(就是安装ceph-deploy)组件的机器,执行如下命令检查存储:

[root@k8sdemo-ceph1 ~]# ceph -scluster 119b3a1c-17ad-43c8-9378-a625b8dd19d9health HEALTH_WARNclock skew detected on mon.k8sdemo-ceph2, mon.k8sdemo-ceph3too many PGs per OSD (1472 > max 300)mds k8sdemo-ceph1 is laggyMonitor clock skew detectedmonmap e2: 3 mons at {k8sdemo-ceph1=10.83.32.224:6789/0,k8sdemo-ceph2=10.83.32.225:6789/0,k8sdemo-ceph3=10.83.32.234:6789/0}election epoch 4792, quorum 0,1,2 k8sdemo-ceph1,k8sdemo-ceph2,k8sdemo-ceph3fsmap e1045: 1/1/1 up {0=k8sdemo-ceph1=up:active(laggy or crashed)}osdmap e311: 3 osds: 3 up, 3 inflags sortbitwise,require_jewel_osdspgmap v1226550: 1472 pgs, 5 pools, 119 GB data, 41716 objects376 GB used, 3433 GB / 3809 GB avail1472 active+cleanclient io 2457 B/s wr, 0 op/s rd, 0 op/s wr
[root@k8sdemo-ceph1 ~]#     #在故障的情况下,这里的osdmap 3 down,经过激活osd盘之后状态变成了up[root@k8sdemo-ceph1 ~]# ceph osd tree
ID WEIGHT  TYPE NAME              UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 3.71986 root default
-2 1.52179     host k8sdemo-ceph10 1.52179         osd.0               up  1.00000          1.00000
-3 1.52179     host k8sdemo-ceph21 1.52179         osd.1               up  1.00000          1.00000
-4 0.67628     host k8sdemo-ceph32 0.67628         osd.2               up  1.00000          1.00000
[root@k8sdemo-ceph1 ~]#   #在故障的情况下,这里的状态都是down,激活osd之后这里的状态都是up

  遇到这种情况我的解决方法如下:

ceph-deploy osd activate k8sdemo-ceph1:/dev/sda4 k8sdemo-ceph2:/dev/sda4 k8sdemo-ceph3:/dev/sda4
#在安装有ceph-deploy管理机器上面执行

  后续经过找一下ceph存储的牛人进行确认,因为我们的ceph版本是10.2.11,这个可能是一个BUG。就是重启之后OSD节点不会自动激活,需要手动激活。我们也可以采用启动自动执行激活命令的方式来实现自动激活。解决方案如下:


vim /etc/rc.d/rc.local
/usr/sbin/ceph-disk -v activate --mark-init systemd --mount /dev/sda4
chmod +x /etc/rc.d/rc.local
#在每一台ceph OSD节点上面增加如上内容:

  2.1 确认cephfs文件系统类型的StorageClass故障:
  当我解决了OSD节点故障之后,执行如下检查命令:

[root@k8sdemo-ceph1 ~]# ceph osd tree
ID WEIGHT  TYPE NAME              UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 3.71986 root default
-2 1.52179     host k8sdemo-ceph10 1.52179         osd.0               up  1.00000          1.00000
-3 1.52179     host k8sdemo-ceph21 1.52179         osd.1               up  1.00000          1.00000
-4 0.67628     host k8sdemo-ceph32 0.67628         osd.2               up  1.00000          1.00000[root@k8sdemo-ceph1 ~]# ceph -scluster 119b3a1c-17ad-43c8-9378-a625b8dd19d9health HEALTH_WARNclock skew detected on mon.k8sdemo-ceph2, mon.k8sdemo-ceph3too many PGs per OSD (1472 > max 300)mds k8sdemo-ceph1 is laggyMonitor clock skew detectedmonmap e2: 3 mons at {k8sdemo-ceph1=10.83.32.224:6789/0,k8sdemo-ceph2=10.83.32.225:6789/0,k8sdemo-ceph3=10.83.32.234:6789/0}election epoch 4792, quorum 0,1,2 k8sdemo-ceph1,k8sdemo-ceph2,k8sdemo-ceph3fsmap e1045: 1/1/1 up {0=k8sdemo-ceph1=up:active(laggy or crashed)}osdmap e311: 3 osds: 3 up, 3 inflags sortbitwise,require_jewel_osdspgmap v1226550: 1472 pgs, 5 pools, 119 GB data, 41716 objects376 GB used, 3433 GB / 3809 GB avail1472 active+cleanclient io 2457 B/s wr, 0 op/s rd, 0 op/s wr

  发现我们的ceph存储OSD节点状态已经是UP了。通过查看kubernetes里面的服务,大部分服务已经正常启动了。但是发现还有一部分服务没有正常启动。通过排查这些应用都是依赖于cephfs这个sc的.

[root@master-01 gitlab]# kubectl get sc
NAME                PROVISIONER         AGE
cephfs              ceph.com/cephfs     26d
dynamic (default)   kubernetes.io/rbd   31d

  我们的k8s集群有两个sc,dynamic这个名称的RBD类型的ceph存储已经好了,但是cephfs这个名称的cephfs类型的存储还没有好。后面的排查思路是:

[root@master-01 cephfs_provisioner]# kubectl describe pvc -n kube-system claim2
Name:          claim2
Namespace:     kube-system
StorageClass:  cephfs
Status:        Pending
Volume:
Labels:        <none>
Annotations:   volume.beta.kubernetes.io/storage-class: cephfsvolume.beta.kubernetes.io/storage-provisioner: ceph.com/cephfs
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
Events:Type       Reason                Age               From                                                                                      Message----       ------                ----              ----                                                                                      -------Normal     Provisioning          97s               ceph.com/cephfs_cephfs-provisioner-79d97b7bdf-rq8lm_58dc76ce-6dc4-11e9-8803-6e4d7afb9686  External provisioner is provisioning volume for claim "kube-system/claim2"Normal     ExternalProvisioning  1s (x9 over 97s)  persistentvolume-controller                                                               waiting for a volume to be created, either by external provisioner "ceph.com/cephfs" or manually created by system administrator
Mounted By:  test-pod2
[root@master-01 cephfs_provisioner]#
# 通过查看依赖于cephfs StorageClass的pvc,发现pv创建不成功,告警如上[root@node-01 ~]# mount -t ceph 10.83.32.224:/ /mnt/cephfs -o name=admin,secret=AQDvBadczen5HRAAD9G3IIU4v9IUtQC6Qf0g5w==
mount: special device 10.83.32.224:/ does not exist
# 然后我不用k8s掉cephfs存储的接口,直接在一台虚拟机上面mount cephfs也是不成功,可以确认和k8s没有关系,就是cephfs的问题;

1. 先把cephfs的第三方插件控制器的资源都重启一下:

[root@master-01 rbac]# pwd
/data/cephfs_provisioner/external-storage/ceph/cephfs/deploy/rbac
[root@master-01 rbac]# ll
total 24
-rw-r--r--. 1 root root 288 Apr  9 18:12 clusterrolebinding.yaml
-rw-r--r--  1 root root 743 May  6 11:07 clusterrole.yaml
-rw-r--r--. 1 root root 670 Apr  9 18:16 deployment.yaml
-rw-r--r--. 1 root root 268 Apr  9 18:12 rolebinding.yaml
-rw-r--r--. 1 root root 321 Apr  9 18:12 role.yaml
-rw-r--r--. 1 root root  98 Apr  9 18:12 serviceaccount.yaml
[root@master-01 rbac]# kubectl delete -f ./
[root@master-01 rbac]# kubectl create -f ./

  发现问题依旧,说明不是第三方存储provisioner的问题。需要找cephfs端的问题;
2. 在ceph端另建一个cephfs文件系统进行测试:
  当我在ceph端另建一个cephfs文件系统的时候,还发生了一个小插曲。其实ceph官方文档中有说明不建议在ceph存储上面创建两个cephfs,容易造成数据丢失等问题;
为了测试,我还是建立一个cephfs2,操作命令如下:

ceph osd pool create fs_kube_data2 128      #创建第二个ceph数据卷
ceph osd pool create fs_kube_metadata2 128  #创建第二个ceph元数据卷
ceph fs flag set enable_multiple true       # 由于ceph不建议开启两个cephfs,所以需要开启运行多个cephfs的选项
ceph fs new cephfs2 fs_kube_metadata2 fs_kube_data2  #创建第二个cephfs文件系统,如果创建了第二个cephfs文件系统,还需要设置default的cephfs才可以别k8s调用
ceph fs set_default cephfs2  #设置刚才创建的cephfs2文件系统为默认的文件系统

  然后我在测试k8s里面调用cephfs的接口创建pv和在虚拟机里面挂载cephfs都可以了

[root@node-01 ~]# mount -t ceph 10.83.32.224:/ /mnt/cephfs -o name=admin,secret=AQDvBadczen5HRAAD9G3IIU4v9IUtQC6Qf0g5w==  成功了
#挂载第一个cephfs文件系统异常,更改为第二个cephfs2文件系统之后再次挂载就成功了.这里的密钥是如何查出来的?cd /etc/ceph/
#登录ceph的管理机器,然后进入到/etc/ceph目录
#查看 ceph.client.admin.keyring 文件内容
total 16
-rw------- 1 root root  129 May  6 14:40 ceph.client.admin.keyring
-rw-r--r-- 1 root root  286 May  6 14:40 ceph.conf
-rw-r--r-- 1 root root 3394 May  6 15:17 ceph-deploy-ceph.log
-rw-r--r-- 1 root root   92 Jul 10  2018 rbdmap
-rw------- 1 root root    0 Apr  5 15:37 tmp9rbpHS
[root@k8sdemo-ceph1 ceph]#
ceph-deploy --overwrite-conf admin node-01
#将密钥文件推送到节点1,然后在节点1的机器上面/etc/ceph目录下面就会有这些密钥文件
#然后就可以通过mount -t ceph mon服务器地址:/ mount_point -o name=用户名,secret=密钥文件内容
#也可以使用ceph-fuse -m 10.83.32.234:6789 /mnt  但是一定要安装ceph-fuse软件才可以 ;

  通过这个步骤的验证可以确认,就是cephfs这个文件有问题,重新创建一个cephfs2的文件系统就没有问题了。但是因为我们的cephfs文件系统里面有数据,包括我们k8s的harbor存储都是运行在cephfs文件系统的sc上面。所以还是要解决cephfs这个名称的sc问题;

3. 找到解决方案彻底解决问题:

  最后经过高人的指点,原来是因为我们的mds服务没有启动成功的原因。mds服务没有启动成功的原因又是因为当初的OSD盘down的原因。但是修复了OSD盘之后为啥MDS服务不会自动启动就不知道啥原因了,可能也是ceph的一个BUG吧。

ceph mds stat
#此命令可以查出那台机器是mds元数据服务器,然后登录那台机器执行下面的命令
systemctl restart  ceph-mds@target
#重启所有服务cdph-mds,解决了问题

  刚才我也说过ceph官方是建议一个ceph存储只能创建一个cephfs文件系统,所以我们刚才测试创建的第二个cephfs2文件系统,也给系统造成了比较多的报错,主要如下:

# cephfs状态异常:[root@k8sdemo-ceph1 9.1_head]# ceph -scluster 119b3a1c-17ad-43c8-9378-a625b8dd19d9health HEALTH_ERRclock skew detected on mon.k8sdemo-ceph2too many PGs per OSD (1984 > max 300)mds rank 0 has failedmds cluster is degradedMonitor clock skew detectedmonmap e2: 3 mons at {k8sdemo-ceph1=10.83.32.224:6789/0,k8sdemo-ceph2=10.83.32.225:6789/0,k8sdemo-ceph3=10.83.32.234:6789/0}election epoch 4798, quorum 0,1,2 k8sdemo-ceph1,k8sdemo-ceph2,k8sdemo-ceph3fsmap e1056: cephfs-0/1/1 up cephfs2-1/1/1 up {[cephfs2:0]=k8sdemo-ceph1=up:active}, 1 failedosdmap e329: 3 osds: 3 up, 3 inflags sortbitwise,require_jewel_osdspgmap v1240137: 1984 pgs, 9 pools, 119 GB data, 41828 objects376 GB used, 3432 GB / 3809 GB avail1984 active+cleanclient io 1831 B/s wr, 0 op/s rd, 0 op/s wr
[root@k8sdemo-ceph1 9.1_head]#[root@k8sdemo-ceph1 9.1_head]# ceph fs get cephfs
Filesystem 'cephfs' (1)
fs_name cephfs
epoch   1049
flags   0
created 2019-04-09 15:58:55.124618
modified    2019-04-15 13:07:31.060391
tableserver 0
root    0
session_timeout 60
session_autoclose   300
max_file_size   1099511627776
last_failure    0
last_failure_osd_epoch  328
compat  compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=file layout v2}
max_mds 1
in  0
up  {}
failed  0
damaged
stopped
data_pools  3
metadata_pool   4
inline_data disabled[root@k8sdemo-ceph1 9.1_head]# ceph health
HEALTH_ERR clock skew detected on mon.k8sdemo-ceph2; too many PGs per OSD (1984 > max 300); mds rank 0 has failed; mds cluster is degraded; Monitor clock skew detected
[root@k8sdemo-ceph1 9.1_head]#[root@k8sdemo-ceph1 9.1_head]# ceph mds stat
e1061: cephfs-1/1/1 up cephfs2-0/1/1 up {[cephfs:0]=k8sdemo-ceph1=up:active}, 1 failed
[root@k8sdemo-ceph1 9.1_head]## 有多个状态输出命令包含了mds rank 0 has failed的报错,其实归根接地是因为我们创建了第二个cephfs2文件系统,删除掉这个cephfs2就没有问题了ceph fs rm cephfs2 --yes-i-really-mean-it
#删除第二个cephfs2文件系统[root@k8sdemo-ceph1 9.1_head]# ceph -scluster 119b3a1c-17ad-43c8-9378-a625b8dd19d9health HEALTH_WARNclock skew detected on mon.k8sdemo-ceph2too many PGs per OSD (1984 > max 300)Monitor clock skew detectedmonmap e2: 3 mons at {k8sdemo-ceph1=10.83.32.224:6789/0,k8sdemo-ceph2=10.83.32.225:6789/0,k8sdemo-ceph3=10.83.32.234:6789/0}election epoch 4798, quorum 0,1,2 k8sdemo-ceph1,k8sdemo-ceph2,k8sdemo-ceph3fsmap e1062: 1/1/1 up {0=k8sdemo-ceph1=up:active}osdmap e331: 3 osds: 3 up, 3 inflags sortbitwise,require_jewel_osdspgmap v1242816: 1984 pgs, 9 pools, 119 GB data, 41816 objects376 GB used, 3432 GB / 3809 GB avail1984 active+cleanclient io 3723 B/s wr, 0 op/s rd, 2 op/s wr#告警解除

4. 总结的一些经验和技巧:

  4.1 pvc删除了,pv是好的,如何恢复pvc?

# 1.设置pv的数据回收策略是Retain,默认用helm安装的都是delete策略,pvc删除的话数据就会丢失;
kubectl patch pv pvc-24cdfbe7-6b3b-11e9-b64b-5065f3457c8c -p '{"spec": {"persistentVolumeReclaimPolicy": "Retain" }}'2. 创建一个pvc的清单文件,引用pv的名字[root@master-01 ~]# cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: jenkinsnamespace: kube-system
spec:accessModes:- ReadWriteOnce# - ReadWriteManystorageClassName: dynamicvolumeName: pvc-24cdfbe7-6b3b-11e9-b64b-5065f3457c8cresources:requests:storage: 8Gi
[root@master-01 ~]#注意这里的pvc名字,命名空间,sc的名字,pv的名字,容量  这些都需要对应上那个丢失pvc的pv的值# 3. 修改pv的状态kubectl edit pv pvc-24cdfbe7-6b3b-11e9-b64b-5065f3457c8c  将以下内容给删除掉claimRef:apiVersion: v1kind: PersistentVolumeClaimname: jenkinsnamespace: kube-systemresourceVersion: "10532614"uid: 24cdfbe7-6b3b-11e9-b64b-5065f3457c8c# 再次查看pv就是属于available状态,并且没有关联的pvc名字4. kubectl apply -f pvc.yaml #重新建立同名的pvc

  4.2 ceph存储端权限变更了,如何更新k8s里面的secrets

#1. 修改用户的权限
Ceph auth caps client.kube mon 'allow rwx' osd 'allow rw pool=fs_kube_data' mds 'allow rwp'
# 2. 查看密钥
[root@k8sdemo-ceph1 ceph]# ceph auth get-key client.admin | base64
QVFEdkJhZGN6ZW41SFJtestUQ5RzNJSVU0djlJVXRRQzZRZjBnNXc9PQ==
[root@k8sdemo-ceph1 ceph]#
# 3. 更新RBD StorageClass依赖的secret的key[root@master-01 ceph]# cat ceph-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: ceph-secretnamespace: kube-system
data:key: QVFEdkJhZGN6ZW41SFJtestUQ5RzNJSVU0djlJVXRRQzZRZjBnNXc9PQ==
type: kubernetes.io/rbd
[root@master-01 ceph]# cat ceph-user-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: ceph-user-secretnamespace: kube-system
data:key: QVFDTks2ZGNjcEZoQmhtestWs4anVvbmVXZnZUeitvMytPbGZ6OFE9PQ==
type: kubernetes.io/rbd# 4. 重建secret和sc
kubectl replace -f ceph-secret.yaml --force
kubectl replace -f ceph-user-secret.yaml --force
kubectl replace -f ceph-storageclass.yaml --force# 5. 推送相关的密钥文件到k8s node节点
ceph-deploy --overwrite-conf admin node-01
scp -r ceph.client.kube.keyring root@node-01:/etc/ceph/

  4.3 更新helm的时候,如果已经有PVC了,如何使用原有的PVC

# 修改jenkins helm value.yaml文件,existingClaim: "jenkins"## jenkins data Persistent Volume Storage Class## jenkins data Persistent Volume Storage Class## If defined, storageClassName: <storageClass>## If set to "-", storageClassName: "", which disables dynamic provisioning## If undefined (the default) or set to null, no storageClassName spec is##   set, choosing the default provisioner.  (gp2 on AWS, standard on##   GKE, AWS & OpenStack)### storageClass: "dynamic"# 注释storageClass的值,开启existingClaim,将内容修改为现有的pvc jenkins

  4.4 在k8s里面如何使用命令扩展?

# kubectl这个命令行工具非常重要,与之相关的命令也很多,我们也记不住那么多的命令,而且也会经常写错,所以命令自动补全是非常有必要的,kubectl命令行工具本身就支持complication,只需要简单的设置下就可以了。以下是linux系统的设置命令:source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

  4.5 还有一些个人的经验如下:

  1. 有状态应用尽量不要放在K8S集群,比如RabbitMQ、Redis、Mysql等。因为这些应用是有状态应用,比如RabbitMQ有3个Pod,这3个Pod都需要有顺序的启动。只有按照顺序启动之后才能保持集群的状态。

  2. 共享存储对于K8S集群至关重要,如果存储出现故障,所有依赖于存储的服务都无法正常启动。特别是一些公共组件肯定会依赖于共享存储,比如 jenkins prometheus监控 EFK日志平台 RabbitMQ、Redis、Mysql GitLab等等。

  3. Ceph存储的学习成本非常高,我们目前的能力只是能够搭建Ceph集群,一旦Ceph集群出现故障排查问题的能力远远不够;

  4. 在K8S集群里面使用的PV有一个数据回收策略,默认是DELETE,一定要将这个策略调整成Retain.可以通过打补丁的方式完成:
    kubectl patch pv pvc-24cdfbe7-6b3b-11e9-b64b-5065f3457c8c -p '{"spec": {"persistentVolumeReclaimPolicy": "Retain" }}'

  5. 在K8S集群关机和开机的过程中,有一个启动的优先顺序,应该按照启动顺序来启动服务器;我个人理解的顺序如下:

    启动:  ceph存储服务器—》K8S master节点—》K8S node节点;
    关机:  K8S node节点—》K8S master节点 ---》ceph存储服务器
  6. 自启动服务一定要检查完整,保证依赖的服务都可以开机自启动。目前我总结的开机自启动的服务包括:
k8s master节点:kube-apiserver.service
kube-controller-manager.service
kube-proxy.service
kube-scheduler.servicek8s node节点:kube-proxy.service
kubelet.service
docker.serviceceph节点:ceph-mds@.service
ceph-mon@.service
ceph-osd@.service[root@k8sdemo-ceph1 ~]# cat /etc/rc.d/rc.local
#!/bin/bash
touch /var/lock/subsys/localulimit -SHn 102400
echo "8192" > /sys/block/sda/queue/read_ahead_kb
/usr/sbin/ceph-disk -v activate --mark-init systemd --mount /dev/sda4
  1. 在做技术的过程中,一定要总结文档,只有总结了文档才可以形成知识共享和积累,对于后续的同样问题能够及时得到解决;并且再解决问题的过程中,建议多看官方文档和google搜索答案;

博文的更详细内容请关注我的个人微信公众号 “云时代IT运维”,本公众号旨在共享互联网运维新技术,新趋势; 包括IT运维行业的咨询,运维技术文档分享。重点关注devops、jenkins、zabbix监控、kubernetes、ELK、各种中间件的使用,比如redis、MQ等;shell和python等运维编程语言;本人从事IT运维相关的工作有十多年。2008年开始专职从事Linux/Unix系统运维工作;对运维相关技术有一定程度的理解。本公众号所有博文均是我的实际工作经验总结,基本都是原创博文。我很乐意将我积累的经验、心得、技术与大家分享交流!希望和大家在IT运维职业道路上一起成长和进步;

转载于:https://blog.51cto.com/zgui2000/2396803

kubernetes一次生产故障日记相关推荐

  1. 节省服务器成本50%以上!独角兽完美日记电商系统容器化改造实践

    完美日记创立于2017年,这家公司上线不到两年即成为天猫彩妆销冠,2019年成为11年来第一个登上天猫双十一彩妆榜首的国货品牌,包揽天猫2019全年彩妆销冠:2020年4月成为首个亮相天猫超级品牌日的 ...

  2. 完美日记:实现高弹性高稳定电商架构

    公司简介 完美日记(Perfect Diary)是广州市"独角兽"创新企业--广州逸仙电子商务有限公司旗下首个美妆品牌,创立于2017年,用心为新生代女性开发高品质.精设计.易上手 ...

  3. 战“疫”日记②|火神山小分队:像听到发令枪一样;徐碧江带勇士集结长沙“小汤山”...

    致敬一线的奇安信"逆行者" 1 火神山小分队: 像听到发令枪一样 我在武汉!我在火神山! 2月1日早上六点多,日记的记录者回到火神山医院,接替彻夜坚守的同事.机房竟然已经基本建成了 ...

  4. knative_使用knative在kubernetes上实现无服务器

    knative If you're already using Kubernetes, you've probably heard about serverless. While both platf ...

  5. 无处不在的 Kubernetes,难用的问题解决了吗?

    容器本质是一项隔离技术,很好的解决了他的前任 - 虚拟化未解决的问题:运行环境启动速度慢.资源利用率低,而容器技术的两个核心概念,Namespace 和 Cgroup,恰到好处的解决了这两个难题.Na ...

  6. Kubernetes 中 设置pod不部署在同一台节点上

    在k8s中,节点的调度主要由亲和性和污点来进行控制的.   而在亲和性部分由分为了节点亲和性和节点反亲和性.   节点亲和性是指在pod部署时,尽量(软策略)或者必须满足(硬策略)部署在某些节点上. ...

  7. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  8. 【Kubernetes】如何使用Kubeadm部署K8S集群

    一 . 准备机器 本次环境采用华为云ECS弹性云服务器部署(也可以使用VMware) vm01(2V4G): Ubuntu_18.04作为K8S master节点 vm02(1V1G): Ubuntu ...

  9. 自定义Kubernetes调度程序来编排高可用性应用程序

    自定义Kubernetes调度程序来编排高可用性应用程序 只要愿意遵守规则,在Kubernetes上进行部署和乘飞机旅行就可以很愉快.通常,事情会"正常工作".但是,如果有兴趣与必 ...

最新文章

  1. ASP.NET 面试题和答案(不断更新)
  2. protobuf前后端解析_Go语言微服务架构实战:第七节 Protobuf协议语法及原理
  3. python+oracle
  4. postgresql中代理键
  5. 计算机发展初期 承载信息的媒体,《多媒体技术与应用》(本)阶段练习一
  6. 真效率神器,UI稿智能转换成前端代码,准确率极高
  7. JavaScript常用开发框架总结
  8. 【经典算法】希尔算法
  9. android注销广播接收器,使用广播接收器 - chuiyuan的个人页面 - OSCHINA - 中文开源技术交流社区...
  10. android确定kernel使用的config文件
  11. 【PMP】PMBOK 笔记 第10章 项目沟通管理
  12. ASP的技术特点与使用方法
  13. 白糖详细 制造工艺、等级划分、国家标准号和注意事项
  14. 3.C++内存管理初步探索
  15. ssh隧道-能ssh就能http和tcp,通过ssh就能访问内网web页面和数据库
  16. 一元n次多项式的处理
  17. 2023年2月《中国数据库行业分析报告》正式发布(含精彩内容概览)
  18. app 的 icon图标 有黑边
  19. 如何写一手好文章:练习、技巧,以及艺术
  20. 关于eclips的一些使用

热门文章

  1. java_IO_File(3)_遍历、递归
  2. 图形描述语言GraphML(3):图形元数据
  3. 2021-11-15UA OPTI512R 傅立叶光学导论20 夫琅禾费衍射
  4. ACM基础题 - 求矩形个数
  5. 学容器必须懂 bridge 网络 - 每天5分钟玩转 Docker 容器技术(32)
  6. Linux查看CPU、内存、IO占用高的进程
  7. 用jquery修改默认的单选框radio或者复选框checkbox选择框样式
  8. 如何查看SharePoint未知错误
  9. 用神经网络分类无理数2**0.5和3**0.5
  10. 平均分辨准确率对网络隐藏层节点数的非线性变化关系03