Relk's 工作手札

在 Cloud-Native 汪洋中載浮載沉的 SRE - Service Restart Engineer

0%

1. 接上行動硬碟,檢查一下被分配到哪個裝置代號

1
2
# 查看分割表狀態
sudo fdisk -l
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xda84cd12

Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 526336 62333918 61807583 29.5G 83 Linux


Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x2ac1c561

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 3907026943 3907024896 1.8T c W95 FAT32 (LBA)
閱讀全文 »

前言

GKE 上原生的 Ingress Controller 限制非常多,需要設定 ServiceType=NodePort 才能使用,
於是我選擇 kubernetes/ingress-nginx 來作為 ingress 使用,不要和我一樣一開始裝成 nginxinc/kubernetes-ingress 的 Ingress Controller XD

這張圖是 Kube Ingress Controller 在 GKE 上的架構,除了 external 以外我還需要 internal 的 ingress

閱讀全文 »

除錯紀錄

最近公司同仁有在抱怨常常寄信到特定單位會寄丟,利用 Google CheckMX 檢查發現

1
SPF must allow Google servers to send mail on behalf of your domain.

根據說明文件表示,需要新增一筆 SPF TXT Record

1
v=spf1 include:_spf.google.com ~all
閱讀全文 »

  1. 利用 openssl-cli 來測試目標 domain

    1
    openssl s_client -connect example.com:443
  2. 檢視輸出訊息,會顯示 Certificate chainServer certificateVerificationSSL handshake 等資訊

    1
    2
    3
    4
    5
    6
    7
    8
    ---
    Certificate chain
    0 s:OU = Domain Control Validated, CN = *.example.com
    i:C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2
    ---
    SSL handshake has read 2283 bytes and written 420 bytes
    Verification error: unable to verify the first certificate
    ---
閱讀全文 »

簡易 CI/CD Pipeline 設計原則

範例用 GitHub Repository

  1. 遵循 GitHub Flow,master 分支永遠是經過驗證且可佈署的
  2. 建立新 Pull Request 時,自動 deploy 到 Staging 環境並執行 Smoke Testing,等團隊其他成員或主管完成 Code Review 以及測試後才能 Mergemaster
  3. 只有被 Tag 的 commit,才能 deploy 到 Production 環境(手動)
  4. 為了方便測試,可以手動 deploy 其他 branch 到 Staging 環境

Pipeline 設定

Jenkinsfile 說明

  1. 全域環境變數設定

    1
    2
    3
    4
    5
    6
    7
    8
    environment {
    # 登入 Docker Hub 的 credential
    DOCKER_HUB_CREDS = credentials('dockerhub-downager')
    # 設定 Staging 和 Production 環境 Postgresql UserName & Password
    FLASK_POSTGRES_CREDS = credentials('flask-app-postgres-user-pass')
    # 決定本次佈署是否要執行 db_migrate.sh 這隻腳本
    DB_MIGRATION = false
    }
    閱讀全文 »

除錯紀錄

最近同事抱怨 elasticsearch 常常掉資料,請我幫忙檢查下 ES 是不是有問題,看了下 cluster 的健康狀態也正常,node 硬碟剩餘空間也都還不少,手動打了下也有資料,實在摸不著頭緒。回頭往資料源頭查,kubectl logs <application_pod> 看了下也都有正常吐 log 到 stdout,往上檢查到 fluentd 時發現不太對勁,kubectl logs <fluentd_pod> | grep -v info 看了下發現報了 Warning:

1
2
2019-11-17 05:07:05 +0000 [warn]: #0 failed to write data into buffer by buffer overflow action=:block
2019-11-17 05:24:05 +0000 [warn]: #0 failed to flush the buffer. retry_time=3 next_retry_seconds=2019-11-17 05:24:32 +0000 chunk="59778cb47a5c5dcf401f4d1c5b2cc88f" error_class=Fluent::Plugin::ElasticsearchOutput::RecoverableRequestFailure error="could not push logs to Elasticsearch cluster ({:host=>\"<elastic_cluster>\", :port=>9200, :scheme=>\"http\", :user=>\"elastic\", :password=>\"obfuscated\", :path=>\"\"}): connect_write timeout reached"

初步檢查看起來是 Buffer 炸掉了,調整一下 Buffer Size 先,順便把 timeout 時間拉長點觀察看看

1
2
3
buffer_chunk_limit "#{ENV['FLUENT_ELASTICSEARCH_BUFFER_CHUNK_LIMIT_SIZE'] || '8M'}"
buffer_queue_limit "#{ENV['FLUENT_ELASTICSEARCH_BUFFER_QUEUE_LIMIT_LENGTH'] || '256'}"
request_timeout 15s

隔天看 Log 還是炸掉,後來仔細爬了一下才發現有人提過這個 Issue: Fluentd stopped sending data to ES for somewhile. #525

閱讀全文 »

前言

最近搞了台 Ryzen 筆電來跑 Linux,筆記下安裝上的細節

安裝步驟

  1. 安裝部份就跳過了,開機後到 Grub 選單時,按 e 編輯開機選項,找到 Linux 開頭那行,移除 quite,加上 noapic noacpi irqpoll

  2. 登入後,打開 Update Manager > View > Linux Kernels 選擇最新的穩定版 (當前是 5.3.0-19)並安裝

  3. 打開 Terminal,編輯 /etc/default/grub,修改成以下資訊:

    1. sudo vi /etc/default/grub
      1
      GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on ivrs_ioapic[4]=00:14.0 ivrs_ioapic[5]=00:00.2 splash"
      • 2020-05-15 Update: 改用以下這段,忘了從哪邊抄來的,系統比較不會凍結
        kernel: 5.3.0-40-generic
        1
        GRUB_CMDLINE_LINUX_DEFAULT="vga=current ivrs_ioapic[4]=00:14.0 ivrs_ioapic[5]=00:00.2 iommu=pt idle=nomwait acpi_backlight=vendor acpi_enforce_resources=lax scsi_mod.use_blk_mq=1"
    2. sudo update-grub
      閱讀全文 »

Zabbix 安裝步驟

安裝環境:CentOS 7

1. 關閉 SELINUX

1
2
3
4
5
6
vim /etc/selinux/config

## 將 SELINUX 修改為 disabled ##
config>SELINUX=disabled

reboot

2. 安裝 Zabbix 4.0 LTS

1
2
3
rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum clean all
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent
閱讀全文 »

更改 Hostname

1
hostnamectl set-hostname <new_hostname>

設定 IP

1
2
3
4
5
6
7
8
# 進入設定精靈
nmtui

# 重啟 network
systemctl restart network

# 檢查設定是否正確
ip address
閱讀全文 »

ESXi Command