Home avatar

蜷缩的蜗牛

专注云原生运维

自建Kubernetes与AWS IAM授权认证.md

为什么需要 IRSA?

在 Kubernetes 集群中,当 Pod 需要访问 AWS 资源时,一个常见的做法是创建具有相应权限的 IAM 用户,并将其凭证(Access Key ID 和 Secret Access Key)作为 Kubernetes Secret 存储。这种方法的主要问题是创建了长期有效的凭证。一旦这些凭证泄露,任何持有者都可以滥用它们,直到我们手动在 AWS 账户中吊销它们。

Kubelet驱逐机制到Linux内核内存回收完整流程解析

Kubelet驱逐机制到Linux内核内存回收完整流程解析

概述

本文档详细解析了从Kubelet驱逐管理器(evictionManager)启动到最终触发Linux内核内存回收机制的完整流程。这个过程涉及多个层次的协作,从用户态的Kubernetes组件到内核态的内存管理机制。

Grafana Sqlite3 Migrations to PostgreSQL

准备环境

  • pgloader
  • PostgreSQL
  • Grafana

初始化数据库

启动 PostgreSQL 和 Grafana

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
version: '3.8'
services:
  postgres:
    image: postgres:15
    network_mode: host
    environment:
      POSTGRES_DB: grafana
      POSTGRES_USER: grafana
      POSTGRES_PASSWORD: grafana
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./postgresql.conf:/etc/postgresql/postgresql.conf
    command: postgres -c config_file=/etc/postgresql/postgresql.conf
  grafana:
    image: grafana/grafana:12.0.2
    container_name: grafana
    network_mode: host
    environment:
      - GF_DATABASE_TYPE=postgres
      - GF_DATABASE_HOST=localhost:5432
      - GF_DATABASE_NAME=grafana
      - GF_DATABASE_USER=grafana
      - GF_DATABASE_PASSWORD=grafana
      - GF_DATABASE_SSL_MODE=disable
    depends_on:
      - postgres
volumes:
  postgres_data:
    driver: local
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

# PostgreSQL 配置文件 - 针对 Grafana 高可用部署优化

# 连接设置
listen_addresses = '*'
port = 5432
max_connections = 200
superuser_reserved_connections = 3

# 内存设置
shared_buffers = 256MB
effective_cache_size = 1GB
maintenance_work_mem = 64MB
work_mem = 4MB

# WAL 设置(用于复制)
wal_level = replica
max_wal_senders = 3
max_replication_slots = 3
wal_keep_size = 1GB
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/archive/%f'

# 检查点设置
checkpoint_completion_target = 0.9
checkpoint_timeout = 15min
max_wal_size = 2GB
min_wal_size = 80MB

# 日志设置
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1d
log_rotation_size = 100MB
log_min_duration_statement = 1000
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_statement = 'ddl'
log_temp_files = 0

# 性能优化
random_page_cost = 1.1
effective_io_concurrency = 200
default_statistics_target = 100

# 安全设置
ssl = off


# 复制设置
hot_standby = on
hot_standby_feedback = on
max_standby_streaming_delay = 30s
wal_receiver_timeout = 60s

# 自动清理
autovacuum = on
autovacuum_max_workers = 3
autovacuum_naptime = 1min
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50

# 时区设置
timezone = 'UTC'
log_timezone = 'UTC'

# 区域设置
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
default_text_search_config = 'pg_catalog.english'

导出 grafana 表结构

1
2
docker compose up -d
docker exec -ti postgres pg_dump --schema-only  -U grafana grafana > grafana-schema.sql

清理 postgres 数据库

停止 postgresgrafana,并删除 postgres 数据库

Karmada声明式配置详细指引

1. 作用与应用场景

Karmada 的 ResourceInterpreterCustomization 允许用户通过 Lua 脚本自定义多集群资源的状态聚合、保留、健康判定等逻辑,解决如 CRD 状态同步、混沌实验等多集群一致性与差异性场景。

0%