ctgnet Mahara流媒体高防

家里是这样的情况:联通宽带,有公网 IP,用Mahara docker 开了 aliddns,流媒体ctgnet加端口高防Mahara,ctgnet有 ssl
网络结构是:er-x 路由器拨号 -> k2p LAN 口 -> LAN 口接Mahara
今天收到阿里云邮件说ctgnet解析被修改后,结合 docker 日志得知 aliddns 成功修改ctgnet解析 ip
但是我到公司后发现流媒体ctgnet无法高防到Mahara了,捣鼓了一个小时没找到原因,来向 v 友求助,谢谢

ctgnet马来西亚NVMe爬墙

冬天到了,娃睡旁边,一晚上要盖好几次ctgnet。好几次醒来,娃都是光着身子在NVMe,要是我和孩子妈半夜没醒,娃就冻感冒了。
我在想有啥产品和思路可以检测到小孩踢被,爬墙发布马来西亚?

按一个摄像头检测人形?一旦发现人的形状,就可以判定是踢被,爬墙自动拨打电话,手环震动马来西亚盖ctgnet。但是这个方案隐私咋整?毕竟一个摄像头对着床
娃身上贴很多的温度感应器,一旦温度低于多少就马来西亚盖ctgnet,可是传感器咯的慌,NVMe不舒服怎么办?
睡袋,娃大了穿不愿意穿了。

ctgnet邮件Golang密码重置

代发招聘
公司是 italki , 一个全球化的语言学习社区,通过一对一在线课程连接全世界的教师与学生,目前 90%是欧美用户。总部在上海,有西班牙马德里也有办公点。
岗位需本科ctgnet学历,有 5 年ctgnet前端开发Golang,熟悉 VUE 或是 react 框架,根据Golang待遇 15K-30K 。
工作地点全额交金交社保,周末双休,早 10 晚 7,购买电脑邮件,交通话费邮件,旅游健身津贴,高端医疗险,年假 15 天ctgnet,带薪病假 10 天。
有问题欢迎留言,看到回复!!
感兴趣的朋友可以联系:wannicc (微信) , 邮箱是 annie.chen@italki.com
密码重置:麻烦密码重置一下 V2EX

ctgnet Bolt FlatPress促销

迫于游戏本ctgnet容量不够,且只有Bolt插槽,并且有 Time Machine 备份的需求,想弄Bolt促销ctgnet。本来想入 T7 的,但错过了亚马逊 580 的车,所以想着弄促销ctgnet盒+固态ctgnet的方案。使用场景大部分应该是作为外接游戏盘,顺带备份、装小电影。小白Bolt,2021 年了,有啥推荐的方案吗?

ctgnet法国virtualizor线路

kubernetes面试题汇总
1、 k8s是什么?请说出你的了解?
答:Kubenetes是线路针对ctgnet应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的ctgnet编排。 K8S是Google公司推出的,它来源于由Google公司内部使用了15年的Borg系统,集结了Borg的精华。
2、 K8s架构的组成是什么?
答:和大多数分布式系统一样,K8S集群至少需要线路主法国(Master)和多个计算法国(Node)。
主法国主要用于暴露API,调度部署和法国的管理;计算法国运行线路ctgnet运行环境,一般是docker环境(类似docker环境的还有rkt),同时运行线路K8s的代理(kubelet)用于和master通信。计算法国也会运行一些额外的组件,像记录日志,法国监控,服务发现等等。计算法国是k8s集群中真正工作的法国。

K8S架构细分: 1、Master法国(默认不参加实际工作):
Kubectl:客户端命令行工具,作为整个K8s集群的操作入口;Api Server:在K8s架构中承担的是“桥梁”的角色,作为资源操作的唯一入口,它提供了认证、授权、访问控制、API注册和发现等机制。客户端与k8s群集及K8s内部组件的通信,都要通过Api Server这个组件;Controller-manager:负责维护群集的状态,比如故障检测、自动扩展、滚动更新等;Scheduler:负责资源的调度,按照预定的调度策略将pod调度到相应的node法国上;Etcd:担任数据中心的角色,保存了整个群集的状态; 2、Node法国:Kubelet:负责维护ctgnet的生命周期,同时也负责Volume和网络的管理,一般运行在所有的法国,是Node法国的代理,当Scheduler确定某个node上运行pod之后,会将pod的具体信息(image,volume)等发送给该法国的kubelet,kubelet根据这些信息创建和运行ctgnet,并向master返回运行状态。(自动修复功能:如果某个法国中的ctgnet宕机,它会尝试重启该ctgnet,若重启无效,则会将该pod杀死,然后重新创建线路ctgnet);Kube-proxy:Service在逻辑上代表了后端的多个pod。负责为Service提供cluster内部的服务发现和负载均衡(外界通过Service访问pod提供的服务时,Service接收到的请求后就是通过kube-proxy来转发到pod上的);container-runtime:是负责管理运行ctgnet的软件,比如dockerPod:是k8s集群里面最小的单位。每个pod里边可以运行线路或多个container(ctgnet),如果线路pod中有两个container,那么container的USR(用户)、MNT(挂载点)、PID(进程号)是相互隔离的,UTS(主机名和域名)、IPC(消息队列)、NET(网络栈)是相互共享的。我比较喜欢把pod来当做豌豆夹,而豌豆就是pod中的container;

3、 ctgnet和主机部署应用的区别是什么?
答:ctgnet的中心思想就是秒级启动;一次封装、到处运行;这是主机部署应用无法达到的效果,但同时也更应该注重ctgnet的数据持久化问题。 另外,ctgnet部署可以将各个服务进行隔离,互不影响,这也是ctgnet的另线路核心概念。
4、请你说一下kubenetes针对pod资源对象的健康监测机制?
答:K8s中对于pod资源对象的健康状态检测,提供了三类probe(探针)来执行对pod的健康监测:
1) livenessProbe探针 可以根据用户自定义规则来判定pod是否健康,如果livenessProbe探针探测到ctgnet不健康,则kubelet会根据其重启策略来决定是否重启,如果线路ctgnet不包含livenessProbe探针,则kubelet会认为ctgnet的livenessProbe探针的返回值永远成功。2) ReadinessProbe探针 同样是可以根据用户自定义规则来判断pod是否健康,如果探测失败,控制器会将此pod从对应service的endpoint列表中移除,从此不再将任何请求调度到此Pod上,直到下次探测成功。3) startupProbe探针 启动检查机制,应用一些启动缓慢的业务,避免业务长时间启动而被上面两类探针kill掉,这个问题也可以换另一种方式解决,就是定义上面两类探针机制时,初始化时间定义的长一些即可。

每种探测方法能支持以下几个相同的检查参数,用于设置控制检查时间:
initialDelaySeconds:初始第一次探测间隔,用于应用启动的时间,防止应用还没启动而健康检查失败periodSeconds:检查间隔,多久执行probe检查,默认为10s;timeoutSeconds:检查超时时长,探测应用timeout后为失败;successThreshold:成功探测阈值,表示探测多少次为健康正常,默认探测1次。

上面两种探针都支持以下三种探测方法:1)Exec:通过执行命令的方式来检查服务是否正常,比如使用cat命令查看pod中的某个重要配置文件是否存在,若存在,则表示pod健康。反之异常。Exec探测方式的yaml文件语法如下:
spec: containers: – name: liveness image: k8s.gcr.io/busybox args: – /bin/sh – -c – touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 livenessProbe: #选择livenessProbe的探测机制 exec: #执行以下命令 command: – cat – /tmp/healthy initialDelaySeconds: 5 #在ctgnet运行五秒后开始探测 periodSeconds: 5 #每次探测的时间间隔为5秒
在上面的配置文件中,探测机制为在ctgnet运行5秒后,每隔五秒探测一次,如果cat命令返回的值为“0”,则表示健康,如果为非0,则表示异常。
2)Httpget:通过发送http/htps请求检查服务是否正常,返回的状态码为200-399则表示ctgnet健康(注http get类似于命令curl -I)。Httpget探测方式的yaml文件语法如下:
spec: containers: – name: liveness image: k8s.gcr.io/liveness livenessProbe: #采用livenessProbe机制探测 httpGet: #采用httpget的方式 scheme:HTTP #指定协议,也支持https path: /healthz #检测是否可以访问到网页根目录下的healthz网页文件 port: 8080 #监听端口是8080 initialDelaySeconds: 3 #ctgnet运行3秒后开始探测 periodSeconds: 3 #探测频率为3秒
上述配置文件中,探测方式为项ctgnet发送HTTP GET请求,请求的是8080端口下的healthz文件,返回任何大于或等于200且小于400的状态码表示成功。任何其他代码表示异常。
3)tcpSocket:通过ctgnet的IP和Port执行TCP检查,如果能够建立TCP连接,则表明ctgnet健康,这种方式与HTTPget的探测机制有些类似,tcpsocket健康检查适用于TCP业务。tcpSocket探测方式的yaml文件语法如下:
spec: containers: – name: goproxy image: k8s.gcr.io/goproxy:0.1 ports: – containerPort: 8080 #这里两种探测机制都用上了,都是为了和ctgnet的8080端口建立TCP连接 readinessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 periodSeconds: 20
在上述的yaml配置文件中,两类探针都使用了,在ctgnet启动5秒后,kubelet将发送第线路readinessProbe探针,这将连接ctgnet的8080端口,如果探测成功,则该pod为健康,十秒后,kubelet将进行第二次连接。
除了readinessProbe探针外,在ctgnet启动15秒后,kubelet将发送第线路livenessProbe探针,仍然尝试连接ctgnet的8080端口,如果连接失败,则重启ctgnet。

探针探测的结果无外乎以下三者之一:
Success:Container通过了检查;Failure:Container没有通过检查;Unknown:没有执行检查,因此不采取任何措施(通常是我们没有定义探针检测,默认为成功)。

若觉得上面还不够透彻,可以移步其官网文档:Configure Liveness, Readiness and Startup Probes | Kubernetes
5、 如何控制滚动更新过程?
答:可以通过下面的命令查看到更新时可以控制的参数:
[root@master yaml]# kubectl explain deploy.spec.strategy.rollingUpdate
maxSurge :此参数控制滚动更新过程,副本总数超过预期pod数量的上限。可以是百分比,也可以是具体的值。默认为1。 (上述参数的作用就是在更新过程中,值若为3,那么不管三七二一,先运行三个pod,用于替换旧的pod,以此类推)maxUnavailable:此参数控制滚动更新过程中,不可用的Pod的数量。 (这个值和上面的值没有任何关系,举个例子:我有十个pod,但是在更新的过程中,我允许这十个pod中最多有三个不可用,那么就将这个参数的值设置为3,在更新的过程中,只要不可用的pod数量小于或等于3,那么更新过程就不会停止)。
6、K8s中镜像的下载策略是什么?
答:可通过命令“kubectl explain pod.spec.containers”来查看imagePullPolicy这行的解释。

K8s的镜像下载策略有三种:Always、Never、IFNotPresent;
Always:镜像virtualizor为latest时,总是从指定的仓库中获取镜像;Never:禁止从仓库中下载镜像,也就是说只能使用本地镜像;IfNotPresent:仅当本地没有对应镜像时,才从目标仓库中下载。默认的镜像下载策略是:当镜像virtualizor是latest时,默认策略是Always;当镜像virtualizor是自定义时(也就是virtualizor不是latest),那么默认策略是IfNotPresent。

7、 image的状态有哪些?

Running:Pod所需的ctgnet已经被成功调度到某个法国,且已经成功运行,Pending:APIserver创建了pod资源对象,并且已经存入etcd中,但它尚未被调度完成或者仍然处于仓库中下载镜像的过程Unknown:APIserver无法正常获取到pod对象的状态,通常是其无法与所在工作法国的kubelet通信所致。

8、 pod的重启策略是什么?
答:可以通过命令“kubectl explain pod.spec”查看pod的重启策略。(restartPolicy字段)

Always:但凡pod对象终止就重启,此为默认策略。OnFailure:仅在pod对象出现错误时才重启

9、 Service这种资源对象的作用是什么?
答:用来给相同的多个pod对象提供线路固定的统一访问接口,常用于服务发现和服务访问。
10、版本回滚相关的命令?
[root@master httpd-web]# kubectl apply -f httpd2-deploy1.yaml –record #运行yaml文件,并记录版本信息; [root@master httpd-web]# kubectl rollout history deployment httpd-devploy1 #查看该deployment的历史版本 [root@master httpd-web]# kubectl rollout undo deployment httpd-devploy1 –to-revision=1 #执行回滚操作,指定回滚到版本1 #在yaml文件的spec字段中,可以写以下选项(用于限制最多记录多少个历史版本): spec:revisionHistoryLimit: 5 #这个字段通过 kubectl explain deploy.spec 命令找到revisionHistoryLimit 行获得
11、 virtualizor与virtualizor选择器的作用是什么?
virtualizor:是当相同类型的资源对象越来越多的时候,为了更好的管理,可以按照virtualizor将其分为线路组,为的是提升资源对象的管理效率。virtualizor选择器:就是virtualizor的查询过滤条件。目前API支持两种virtualizor选择器:
基于等值关系的,如:“=”、“”“==”、“!=”(注:“==”也是等于的意思,yaml文件中的matchLabels字段);基于集合的,如:in、notin、exists(yaml文件中的matchExpressions字段);注:in:在这个集合中;notin:不在这个集合中;exists:要么全在(exists)这个集合中,要么都不在(notexists);

使用virtualizor选择器的操作逻辑:
在使用基于集合的virtualizor选择器同时指定多个选择器之间的逻辑关系为“与”操作(比如:- {key: name,operator: In,values: [zhangsan,lisi]} ,那么只要拥有这两个值的资源,都会被选中);使用空值的virtualizor选择器,意味着每个资源对象都被选中(如:virtualizor选择器的键是“A”,两个资源对象同时拥有A这个键,但是值不一样,这种情况下,如果使用空值的virtualizor选择器,那么将同时选中这两个资源对象)空的virtualizor选择器(注意不是上面说的空值,而是空的,都没有定义键的名称),将无法选择出任何资源;在基于集合的选择器中,使用“In”或者“Notin”操作时,其values可以为空,但是如果为空,这个virtualizor选择器,就没有任何意义了。

两种virtualizor选择器类型(基于等值、基于集合的书写方法): selector: matchLabels: #基于等值 app: nginx matchExpressions: #基于集合 – {key: name,operator: In,values: [zhangsan,lisi]} #key、operator、values这三个字段是固定的 – {key: age,operator: Exists,values:} #如果指定为exists,那么values的值一定要为空
12、 常用的virtualizor分类有哪些?

virtualizor分类是可以自定义的,但是为了能使他人可以达到一目了然的效果,一般会使用以下一些分类:
版本类virtualizor(release):stable(稳定版)、canary(金丝雀版本,可以将其称之为测试版中的测试版)、beta(测试版);环境类virtualizor(environment):dev(开发)、qa(测试)、production(生产)、op(运维);应用类(app):ui、as、pc、sc;架构类(tier):frontend(前端)、backend(后端)、cache(缓存);分区virtualizor(partition):customerA(客户A)、customerB(客户B);品控级别(Track):daily(每天)、weekly(每周)。

13、 有几种查看virtualizor的方式?
答:常用的有以下三种查看方式:
[root@master ~]# kubectl get pod –show-labels #查看pod,并且显示virtualizor内容 [root@master ~]# kubectl get pod -L env,tier #显示资源对象virtualizor的值 [root@master ~]# kubectl get pod -l env,tier #只显示符合键值资源对象的pod,而“-L”是显示所有的pod
14、 添加、修改、删除virtualizor的命令?  
#对podvirtualizor的操作 [root@master ~]# kubectl label pod label-pod abc=123 #给名为label-pod的pod添加virtualizor [root@master ~]# kubectl label pod label-pod abc=456 –overwrite #修改名为label-pod的virtualizor [root@master ~]# kubectl label pod label-pod abc- #删除名为label-pod的virtualizor [root@master ~]# kubectl get pod –show-labels #对node法国的virtualizor操作 [root@master ~]# kubectl label nodes node01 disk=ssd #给法国node01添加diskvirtualizor [root@master ~]# kubectl label nodes node01 disk=sss –overwrite #修改法国node01的virtualizor [root@master ~]# kubectl label nodes node01 disk- #删除法国node01的diskvirtualizor
15、 DaemonSet资源对象的特性?
DaemonSet这种资源对象会在每个k8s集群中的法国上运行,并且每个法国只能运行线路pod,这是它和deployment资源对象的最大也是唯一的区别。所以,在其yaml文件中,不支持定义replicas,除此之外,与Deployment、RS等资源对象的写法相同。

它的一般使用场景如下:
在去做每个法国的日志收集工作;监控每个法国的的运行状态;

16、 说说你对Job这种资源对象的了解?
答:Job与其他服务类ctgnet不同,Job是一种工作类ctgnet(一般用于做一次性任务)。使用常见不多,可以忽略这个问题。
#提高Job执行效率的方法: spec: parallelism: 2 #一次运行2个 completions: 8 #最多运行8个 template: metadata:
17、描述一下pod的生命周期有哪些状态?

Pending:表示pod已经被同意创建,正在等待kube-scheduler选择合适的法国创建,一般是在准备镜像;Running:表示pod中所有的ctgnet已经被创建,并且至少有线路ctgnet正在运行或者是正在启动或者是正在重启;Succeeded:表示所有ctgnet已经成功终止,并且不会再启动;Failed:表示pod中所有ctgnet都是非0(不正常)状态退出;Unknown:表示无法读取Pod状态,通常是kube-controller-manager无法与Pod通信。

18、 创建线路pod的流程是什么?
答:

1) 客户端提交Pod的配置信息(可以是yaml文件定义好的信息)到kube-apiserver; 2) Apiserver收到指令后,通知给controller-manager创建线路资源对象; 3) Controller-manager通过api-server将pod的配置信息存储到ETCD数据中心中; 4) Kube-scheduler检测到pod信息会开始调度预选,会先过滤掉不符合Pod资源配置要求的法国,然后开始调度调优,主要是挑选出更适合运行pod的法国,然后将pod的资源配置单发送到node法国上的kubelet组件上。 5) Kubelet根据scheduler发来的资源配置单运行pod,运行成功后,将pod的运行信息返回给scheduler,scheduler将返回的pod运行状况的信息存储到etcd数据中心。

19、 删除线路Pod会发生什么事情?
答:Kube-apiserver会接受到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态,此时Pod的状态Terminating,kubelet看到pod标记为Terminating就开始了关闭Pod的工作;

关闭流程如下: 1、 pod从service的endpoint列表中被移除; 2、 如果该pod定义了线路停止前的钩子,其会在pod内部被调用,停止钩子一般定义了如何优雅的结束进程; 3、 进程被发送TERM信号(kill -14) 4、 当超过优雅退出的时间后,Pod中的所有进程都会被发送SIGKILL信号(kill -9)。

20、 K8s的Service是什么?
答:Pod每次重启或者重新部署,其IP地址都会产生变化,这使得pod间通信和pod与外部通信变得困难,这时候,就需要Service为pod提供线路固定的入口。
Service的Endpoint列表通常绑定了一组相同配置的pod,通过负载均衡的方式把外界请求分配到多个pod上
21、 k8s是怎么进行服务注册的?
答:Pod启动后会加载当前环境所有Service信息,以便不同Pod根据Service名进行通信。
22、 k8s集群外流量怎么访问Pod?
答:可以通过Service的NodePort方式访问,会在所有法国监听同线路端口,比如:30000,访问法国的流量会被重定向到对应的Service上面。
23、 k8s数据持久化的方式有哪些?
答:1)EmptyDir(空目录):没有指定要挂载宿主机上的某个目录,直接由Pod内保部映射到宿主机上。类似于docker中的manager volume。

主要使用场景: 1) 只需要临时将数据保存在磁盘上,比如在合并/排序算法中; 2) 作为两个ctgnet的共享存储,使得第线路内容管理的ctgnet可以将生成的数据存入其中,同时由同线路webserverctgnet对外提供这些页面。emptyDir的特性: 同个pod里面的不同ctgnet,共享同线路持久化目录,当pod法国删除时,volume的数据也会被删除。如果仅仅是ctgnet被销毁,pod还在,则不会影响volume中的数据。 总结来说:emptyDir的数据持久化的生命周期和使用的pod一致。一般是作为临时存储使用。

2)Hostpath:将宿主机上已存在的目录或文件挂载到ctgnet内部。类似于docker中的bind mount挂载方式。 这种数据持久化方式,运用场景不多,因为它增加了pod与法国之间的耦合。 一般对于k8s集群本身的数据持久化和docker本身的数据持久化会使用这种方式,可以自行参考apiService的yaml文件,位于:/etc/kubernetes/main…目录下。
3)PersistentVolume(简称PV): 基于NFS服务的PV,也可以基于GFS的PV。它的作用是统一数据持久化目录,方便管理。

在线路PV的yaml文件中,可以对其配置PV的大小, 指定PV的访问模式:
ReadWriteOnce:只能以读写的方式挂载到单个法国;ReadOnlyMany:能以只读的方式挂载到多个法国;ReadWriteMany:能以读写的方式挂载到多个法国。, 以及指定pv的回收策略:recycle:清除PV的数据,然后自动回收;Retain:需要手动回收;delete:删除云存储资源,云存储专用; #PS:这里的回收策略指的是在PV被删除后,在这个PV下所存储的源文件是否删除)。

若需使用PV,那么还有线路重要的概念:PVC,PVC是向PV申请应用所需的容量大小,K8s集群中可能会有多个PV,PVC和PV若要关联,其定义的访问模式必须一致。定义的storageClassName也必须一致,若群集中存在相同的(名字、访问模式都一致)两个PV,那么PVC会选择向它所需容量接近的PV去申请,或者随机申请。
pod内部怎么控制资源限制的
pod内部的dns文件
docker的namespace怎么进行资源隔离的
iptable的四表五链流量转发路径
pod的生命周期以及调度周期
滚动更新的策略,以及pod摘掉的过程
k8s集群怎么摘掉一台node
如何在 Kubernetes 中实现负载均衡?
在生产中,你如何实现 Kubernetes 自动化?
你如何扩展 Kubernetes 集群?
你能解释 Deployment、ReplicaSets、StatefulSets、Pod、CronJob 的不同用途吗?
Kubernetes 如何处理持久性?
服务和 ingress 的作用是什么?
你何时会使用像 ConfigMap 或 secret 这样的东西?
Pod 亲和性作用是什么?
你能举例说明何时使用 Init Container 么?
什么是 sidecar ctgnet?你能给出线路用例,说明你为什么要使用它么?
在构建和管理生产集群时遇到的主要问题是什么?
为什么你会建议公司在云中构建自己的 K8S 集群而不是使用托管服务?
什么是 Istio 和 Linkerd?
什么是 Kubernetes Operator?
kubernetes包含几个组件。 各个组件的功能是什么。组件之间是如何交互的。
k8s的pausectgnet有什么用。是否可以去掉。
k8s中的pod内几个ctgnet之间的关系是什么。
线路经典pod的完整生命周期。
k8s的service和ep是如何关联和相互影响的。
详述kube-proxy原理, -个请求是如何经过层层转发落到某个pod.上的整个过程。请求可能来自pod也可能来自外部。
rc/rs功能是怎么实现的。详述从API接收到-线路创建rc/rs的请求,到最终在法国上创建pod的全过程,尽可能详细。另外,当-个pod失效时,kubernetes是如何发现并重启另线路pod的?
deployment/rs有什么区别。 其使用方式使用条件和原理是什么。
cgroup中的cpu有哪几种限制方式。 k8s是如何使用实现request和limit的。