小编Rya*_* Lv的帖子

Kubernetes:部署和副本集有什么区别?

副本集和部署都有属性replica: 3,部署和副本集有什么区别?部署是否通过底层的副本集进行?

部署配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    my-label: my-value
spec:
  replicas: 3
  selector:
    matchLabels:
      my-label: my-value
  template:
    metadata:
      labels:
        my-label: my-value
    spec:
      containers:
        - name: app-container
          image: my-image:latest
Run Code Online (Sandbox Code Playgroud)

副本集的配置

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
  labels:
    my-label: my-value
spec:
  replicas: 3
  selector:
    matchLabels:
      my-label: my-value
  template:
    metadata:
      labels:
        my-label: my-value
    spec:
      containers:
        - name: app-container
          image: my-image:latest
Run Code Online (Sandbox Code Playgroud)

Kubernetes 文档

何时使用 ReplicaSet

ReplicaSet 可确保在任何给定时间运行指定数量的 Pod 副本。然而,部署是一个更高级别的概念,它管理 ReplicaSet 并为 Pod 提供声明性更新以及许多其他有用的功能。因此,我们建议使用 Deployments 而不是直接使用 ReplicaSet,除非您需要自定义更新编排或根本不需要更新。

这实际上意味着您可能永远不需要操作 …

kubernetes

85
推荐指数
4
解决办法
5万
查看次数

Terraform:“tags”和“tags_all”有什么区别?

将 terraform 升级到 后3.64.2,尽管我没有更改任何代码,但terraform plan提醒我它将替换tagtag_all. tags和 和有什么不一样tags_all

~ resource "aws_lb_listener" "frontend_http_tcp" {
        id                = "xxxxx"
      ~ tags              = {
          - "environment" = "production" -> null
          - "purpose"     = "onboarding-integration" -> null
          - "terraform"   = "true" -> null
        }
      ~ tags_all          = {
          - "environment" = "production"
          - "purpose"     = "onboarding-integration"
          - "terraform"   = "true"
        } -> (known after apply)
        # (4 unchanged attributes hidden)

        # (1 unchanged block hidden) …
Run Code Online (Sandbox Code Playgroud)

terraform

14
推荐指数
1
解决办法
1万
查看次数

Docker:runc:[2:INIT] 是什么意思?

最近我们将我们的 web 服务器的 Linux 内核从 3.12.57-60.35 升级到了 3.12.62-60.62.1。

升级后,所有docker容器都无法正常启动。

每次我尝试启动我的容器时,runc:[2:INIT]都会创建一个全新的进程并挂在那里,这会占用 100% 的 CPU 负载。

同时,容器启动失败。

  1. runc:[2:INIT] 是什么意思?

  2. 如何解决?

在此处输入图片说明

一些背景资料

> docker -v
Docker version 17.04.0-ce, build 78d1802

> uname -r
3.12.74-60.64.96-default

> containerd -v
containerd version 0.2.3

> docker-runc -v
runc version spec: 1.0.0-rc2-dev
Run Code Online (Sandbox Code Playgroud)

码头工人信息

docker info
Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 28
Server Version: 17.04.0-ce
Storage Driver: overlay
 Backing Filesystem: xfs
 Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local …
Run Code Online (Sandbox Code Playgroud)

containers docker

13
推荐指数
2
解决办法
5038
查看次数

什么是VTIMEZONE用于icalendar?为什么不只是UTC时间?

什么是VTIMEZONE用于icalendar?

例如1

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.12.3//EN
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Asia/Shanghai
BEGIN:STANDARD
TZOFFSETFROM:+0900
RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYMONTH=9;BYDAY=3SU
DTSTART:19890917T000000
TZNAME:GMT+8
TZOFFSETTO:+0800
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0800
DTSTART:19910414T000000
TZNAME:GMT+8
TZOFFSETTO:+0900
RDATE:19910414T000000
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
TRANSP:OPAQUE
LAST-MODIFIED:20170305T083916Z
UID:gjo1burcjnsib4p2j8tbbv4hh0@google.com
DTSTAMP:20170305T083916Z
LOCATION:Cell Group
DESCRIPTION:
STATUS:CONFIRMED
SEQUENCE:0
SUMMARY:Study Bible
DTSTART;TZID=Asia/Shanghai:20170324T193000
DTEND;TZID=Asia/Shanghai:20170324T213000
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
CREATED:20160312T140632Z
RRULE:FREQ=WEEKLY;BYDAY=FR
BEGIN:VALARM
X-WR-ALARMUID:9B47E27E-9063-417E-B488-409387A3201A
UID:9B47E27E-9063-417E-B488-409387A3201A
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
ACKNOWLEDGED:20161125T105826Z
X-APPLE-DEFAULT-ALARM:TRUE
ACTION:NONE
END:VALARM
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)

来自iCalendar文档

VTIMEZONE:提供定义时区的组件属性分组.

1. VTIMEZONE的定义是什么?

是否可以描述某个地点的冬季时间和夏季时间?

2.什么是VTIMEZONE用于?

我不必在icalendar对象中指定VTIMEZONE组件.相反,我将当地时间转换为utc时间,并导出icalendar事件.

# Before
DTSTART:20170324T113000Z
DTEND:20170324T130000

# After
DTSTART;TZID=Asia/Shanghai:20170324T193000
DTEND;TZID=Asia/Shanghai:20170324T213000
Run Code Online (Sandbox Code Playgroud)

2.1这有意义吗?没有VTIMEZONE的icalendar对象

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.12.3//EN
BEGIN:VEVENT
TRANSP:OPAQUE …
Run Code Online (Sandbox Code Playgroud)

icalendar timezone calendar rfc5545

12
推荐指数
1
解决办法
6128
查看次数

Terraform:如何在variables.tf中声明必需(或可选)的变量?

这里我有一个variables.tf定义输入变量。

# Input variable definitions

variable "project" {
  description = "project name, e.g. paylocity, paychex, ultipro"
  type = string
}

variable "environment" {
  description = "the environment of project, e.g. production, sandbox, staging"
  type = string
  default = "sandbox"
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将变量标记为必需或可选?

我脑海中的伪代码是这样的。

variable "project" {
  description = "project name, e.g. paylocity, paychex, ultipro"
  type = string
  presence = required (or optional)
}
Run Code Online (Sandbox Code Playgroud)

terraform

8
推荐指数
1
解决办法
2万
查看次数

为什么 Kubernetes 集群中有这么多证书?

k8s集群中组件之间的连接图

一个Kubernetes集群包含多个组件,例如kubelet、etcd、api-server等。

我们在搭建集群的时候需要设置很多证书和密钥,然后它们之间就可以携带这些证书进行通信。

> kubectl describe pod kube-apiserver-controlplane -n=kube-system


Name:                 kube-apiserver-controlplane
Namespace:            kube-system
...
Controlled By:  Node/controlplane
Containers:
  kube-apiserver:
    Container ID:  docker://6974d026de0b2fadb3d2628d0df971ddc4c3d772665b2cd960a1d0e385f97a5d
    Image:         k8s.gcr.io/kube-apiserver:v1.20.0
    Image ID:      docker-pullable://k8s.gcr.io/kube-apiserver@sha256:8b8125d7a6e4225b08f04f65ca947b27d0cc86380bf09fab890cc80408230114
    Command:
      kube-apiserver
      ...
      --client-ca-file=/etc/kubernetes/pki/ca.crt
      --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
      --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
      --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
      --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
      --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
      --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
      --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
      --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
      --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
      ...
      ...
Run Code Online (Sandbox Code Playgroud)

我了解证书颁发机构(CA)、证书、mTLS 的概念以及 HTTPs 的机制。

我知道零信任模型。

但我不明白这些 Kubernetes 证书试图解决什么安全风险。

如果黑客可以获得我们节点的根访问权限,他们就可以查看包括证书在内的所有内容,这种复杂性似乎并没有给我们带来更多的安全性。

问题

  • 对于 Kubernetes 集群来说,哪些安全风险是最重要(常见)的?

  • 如果我不使用证书来保护集群内的内部通信,黑客将如何攻击我?

    据我所知,AWS负载均衡器和EC2之间的通信是HTTP而不是HTTPs,看起来没问题。为什么负载均衡器和 EC2 之间不需要证书,但 Kubernetes 集群内需要证书?

kubernetes kubernetes-security

8
推荐指数
1
解决办法
496
查看次数

Backbone:为什么模型和视图之间的事件语法差别很大?

在Backbone.Model中定义事件

var Todo = Backbone.Model.extend({
  initialize: function(){
    this.on('change', function(){
        console.log('- Values for this model have changed.');
    });
  }
})
Run Code Online (Sandbox Code Playgroud)

在Backbone.View中定义事件

var TodoView = Backbone.View.extend({
  className: "document-row",
  events: {
    "click .icon":          "open",
    "click .button.delete": "destroy"
  }
})
Run Code Online (Sandbox Code Playgroud)

我的问题

定义事件语法在模型/集合和视图之间是完全不同的,为什么它们以这种方式设计?

我认为最好定义这样的模型事件.但骨干不支持它.

var Todo = Backbone.Model.extend({
  events: {
    "change": "foo"
  },

  foo: function(){
    console.log("test")
  }
});
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js

7
推荐指数
1
解决办法
202
查看次数

AWS:为实例指定安全组时,其 ENI 是否在幕后指定了安全组?

这里我有一个 AWS 实例,它指定了两个安全组default\xe2\x91\xa0 和my first group\xe2\x91\xa1。

\n\n

现在我想让这个实例 ssh 可用。以下两种方式都有效:

\n\n
    \n
  • 使用新的安全组指定此实例ssh-available
  • \n
  • 或者,找到该实例的弹性网络接口(ENI),然后指定带有安全组的ENI ssh-available
  • \n
\n\n

它们相同吗?

\n\n

为实例指定安全组时,其 eni 是否在幕后指定了安全组?

\n\n

在此输入图像描述

\n

amazon-ec2 amazon-web-services

7
推荐指数
2
解决办法
5006
查看次数

AWS VPC:路由表如何将本地流量重定向到正确的子网和实例?

AWS专有网络

这是一个AWS典型的VPC,它由以下组件组成

  • 两个子网
  • 互联网网关
  • 路由表
  • 实例

想象一个场景

步骤1,子网1中的实例(私有IP 172.31.0.5)发送数据包到IP 172.31.16.5(子网2中)。

step2,数据包到达路由表,路由表将数据包重定向到目标local

第三步,一些神奇的事情发生了。

步骤4、instance(172.31.16.5)接收数据包。

下面的问题是关于step3中的魔法。

  1. 本地在这个地方是什么意思?VPC 网络?
  2. vpc和子网的拓扑结构是怎样的?
  3. 路由表如何知道哪个子网应该是接收此数据包的正确子网?
  4. 路由表如何知道哪个实例应该是接收此数据包的正确实例?
  5. 路由表如何将数据包重定向到实例(172.31.16.5)?
  6. 如果我想更好地理解它,我应该先学习哪些背景知识?

topology routetable amazon-web-services amazon-vpc

7
推荐指数
2
解决办法
4552
查看次数

AWS RDS PostgreSQL:PostgreSQL 复制延迟的承诺值是多少?

我有一个带有四个副本的主 RDS 实例。

  • 主数据库:Postgres、4 个 vCPU、16GB RAM、us-west-2a

  • Replica1:Postgres、4 个 vCPU、16GB RAM、us-west-2a、200G SSD(无流量,仅用于测试)

  • Replica2:Postgres、4 个 vCPU、16GB RAM、us-west-2b、200G SSD(无流量,仅用于测试)

  • Replica3:Postgres、2 个 vCPU、8GB RAM、us-west-2b、200G SSD(流量不大)

  • Replica4:Postgres、2 个 vCPU、8GB RAM、us-west-2b、200G SSD(流量很少)

在没有任何高 IOPS 的情况下,主数据库和只读副本之间的延迟超过 16 秒,有时甚至达到 30 秒。

我花了很多精力来挖掘滞后的根本原因。

以下是没有任何流量的副本的 CloudWatch 报告。

在此输入图像描述

假设一:是IO积分造成的吗?

这是 IO 信用报告,过去 6 小时始终为 100%,我不认为这是由 IO 问题引起的。

在此输入图像描述

即使我不认为这是由 IO 引起的,我还是决定将数据库磁盘从 GP2 升级到 IO1,并配置 3000 IOPS。

但这不起作用,滞后仍然存在。

假设二:是否是参数热备导致的?

回复没有流量!它与 postgresql 参数无关max_standby_streaming_delay并且hot standby

假设三:是否是网络IO引起的?

流量始终低于1M/s

假设四:是否是由我的应用程序中触发的长时间运行的查询引起的?

我创建了两个全新的 m5.large PostgreSQL 实例来验证这个假设,并使用 pgbench 进行基准测试。

  • 主要:M5.large,配置 3000 IOPS。

  • 副本:M5.xlarge,具有 1000 个预配置 IOPS。 …

postgresql amazon-web-services amazon-rds

7
推荐指数
1
解决办法
6664
查看次数