Kubernetes入門メモ書き
k8sに入門しているのでどうやって習得していったのか備忘録ながら書く。
k8sって2年前?くらいは「人類には早すぎる」って言われてた気がするのにもはや知ってて当たり前みたいな風潮がある。
人類の進化が早いのか、人類のミュータント化に成功したのか、k8sが歩み寄ったのか、AWS等のパブリッククラウドがカスタムして使いやすくなったのか。
多分一番最後かその前が当たりだと思っている。
第一歩
なにはともかく公式ドキュメントを読む。やっぱり文章量は公式が随一。
Kubernetesとは何か?では公式が丁寧に過去まで振り返って説明してくれている。
チュートリアルではRedis podを作成してみる等ハンズオンも手堅い。
参考書
仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん
ほとんどがDockerについて言及されている。
k8sについては最後の章で少しだけハンズオンがある。
Dockerについての知識だったり経験はすでにあったのでその辺は読み飛ばした。
ただ、最後の章だけはイラストも豊富で公式ドキュメントで得た知識に肉付けすることができたかなと思っている。
「あとがき」では作者のDockerに対する著者の思い、今後私達が習得しなければならない知識に関しても言及してくれている点で良書。
買ってよかったと思える一冊。必須ではない。
入門 Kubernetes
絶対正義オライリーの参考書。オライリーあるあるというか物量がものすごいので何周もしないといけない。
ロールアウト戦略とかスケジューラの動きとかともかく詳細に書かれている。
k8s入門には必須だと思う。
本書について言及すると別のPOSTにした方がいいと思うので割愛する。
その他
気になっているものです。
udemyのコースがありました。udemyを多用している私にとって魅力的だったのですが、
講義概要を見るとEKSでのハンズオンになるみたいなので、EKSをマスターノードにして、EC2等をワーカーノードで構築していくんだろうなぁと思ってしまった。
EKSが巻き取ってくれているところが多そうというので最初は愚直にCerficide Kubernetesを使わないようにしようかなと悩んでいるところ。
多分、セールが来たら買います。
PHP Benchmark
の続き。
benchmarkに使うscriptは公式が出しているものを使っていきます。
実行環境
Raspberry Pi4 ModelB
CPU: 4core Arm Cortex-A72 ARMv8 64bit
RAM: 4GB
JIT機能は有効にしてないです。PHP8でもデフォルトで無効化なのでまずは基本の状態で見ていきます。
phpbrewについては↓のREADMEを参照するのが一番よいです。
PHP8.0.11
PHP 8.0.11 (cli) (built: Oct 17 2021 21:12:34) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.11, Copyright (c) Zend Technologies $ php Zend/bench.php simple 0.034 simplecall 0.012 simpleucall 0.050 simpleudcall 0.051 mandel 0.250 mandel2 0.272 ackermann(7) 0.058 ary(50000) 0.016 ary2(50000) 0.013 ary3(2000) 0.103 fibo(30) 0.189 hash1(50000) 0.022 hash2(500) 0.027 heapsort(20000) 0.059 matrix(20) 0.059 nestedloop(12) 0.071 sieve(30) 0.039 strcat(200000) 0.011 ------------------------ Total 1.337
PHP 7.4.25
$ php -v PHP 7.4.25 (cli) (built: Oct 26 2021 20:39:21) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies $ php Zend/bench.php simple 0.088 simplecall 0.018 simpleucall 0.056 simpleudcall 0.060 mandel 0.253 mandel2 0.294 ackermann(7) 0.062 ary(50000) 0.016 ary2(50000) 0.013 ary3(2000) 0.116 fibo(30) 0.194 hash1(50000) 0.025 hash2(500) 0.025 heapsort(20000) 0.064 matrix(20) 0.064 nestedloop(12) 0.125 sieve(30) 0.042 strcat(200000) 0.012 ------------------------ Total 1.526
PHP 7.3.31
$ php -v PHP 7.3.31 (cli) (built: Oct 26 2021 21:25:58) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies $ php Zend/bench.php simple 0.103 simplecall 0.033 simpleucall 0.083 simpleudcall 0.098 mandel 0.507 mandel2 0.398 ackermann(7) 0.103 ary(50000) 0.018 ary2(50000) 0.014 ary3(2000) 0.162 fibo(30) 0.388 hash1(50000) 0.030 hash2(500) 0.030 heapsort(20000) 0.098 matrix(20) 0.104 nestedloop(12) 0.185 sieve(30) 0.055 strcat(200000) 0.014 ------------------------ Total 2.424
PHP 7.2.24
$ php -v PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies PHP Fatal error: Uncaught Error: Call to undefined function hrtime() in /home/dev/ssd/git/php-src/Zend/bench.php:350 Stack trace: #0 /home/dev/ssd/git/php-src/Zend/bench.php(357): gethrtime() #1 /home/dev/ssd/git/php-src/Zend/bench.php(384): start_test() #2 {main} thrown in /home/dev/ssd/git/php-src/Zend/bench.php on line 350
https://www.php.net/manual/ja/function.hrtime.php
hrtime()関数って標準であったよな・・・?と思ったらphp7.3から導入してました。
そりゃだめですよね。
5.6系を入れてみる。
エラーが出てだめでした。理由はopensslのバージョン問題です。
phpbrewの issuesも見てみましたが、サポートする気はないようです。
そもそもEOLを2018年に迎えているので当たり前ですね。
opensslのバージョン下げて無理やりいれようとか思いましたがクレイジーすぎると思ってすぐやめました。
やるとしてもソースからインストールですね。どこかでこけそうな予感してますが。
$ phpbrew known --old $ phpbrew install 5.6 ===> Loading and resolving variants... Checking distribution checksum... PHP Fatal error: Uncaught Error: Call to undefined function PhpBrew\Tasks\hash_file() in phar:///usr/local/bin/phpbrew/src/PhpBrew/Tasks/DownloadTask.php:28 Stack trace: #0 phar:///usr/local/bin/phpbrew/src/PhpBrew/Command/InstallCommand.php(384): PhpBrew\Tasks\DownloadTask->download('https://www.php...', '/root/.phpbrew/...', 'sha256', 'ffd025d34623553...') #1 [internal function]: PhpBrew\Command\InstallCommand->execute('5.6.40') #2 phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/CommandBase.php(846): call_user_func_array(Array, Array) #3 phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/Application.php(398): CLIFramework\CommandBase->executeWrapper(Array) #4 phar:///usr/local/bin/phpbrew/src/PhpBrew/Console.php(105): CLIFramework\Application->run(Array) #5 phar:///usr/local/bin/phpbrew/bin/phpbrew(26): PhpBrew\Console->runWithTry(Array) #6 /usr/local/bin/phpbrew(12): require('phar:///usr/loc...') #7 {main} thrown in phar:///usr/local/bin/phpbrew/src/PhpBrew/Tasks/DownloadTask.php on line 28
ペチゾーが来たゾウ🐘
ラズパイ(CentOS)にphpbrewで最新版のPHPをinstallしてみる。
phpcon2021でペチゾー君が我が家に来たので久々にPHP触ってBenchmarkとってみようと思い立ったのでやってみる。
こういう抽選系のは当たったことないのでうれしい。elePHPantも欲しいです。
ちなみに PHP5.6系&CakePHP2なアプリケーション開発はしたことあります。確か4年ぐらい前の話。
プライベートでLalavel使ってメモ帳的なものも作ったことあるけど忘れてしまった。
$ dnf install php $ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew $ mv phpbrew /usr/local/bin/ $ /usr/local/bin/phpbrew init $vi ~/.bashrc ## 追記 [[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc $ phpbrew known # WARNING: json extension is required for parsing release info. ===> Fetching release list... Downloading https://www.php.net/releases/index.php?json=1&version=8&max=100 via curl extension PHP Fatal error: Uncaught Error: Call to undefined function PhpBrew\json_decode() in phar:///usr/local/bin/phpbrew/src/PhpBrew/ReleaseList.php:171 Stack trace: #0 phar:///usr/local/bin/phpbrew/src/PhpBrew/ReleaseList.php(177): PhpBrew\ReleaseList::downloadReleaseListFromOfficialSite(8, 100, Object(GetOptionKit\OptionResult)) #1 phar:///usr/local/bin/phpbrew/src/PhpBrew/ReleaseList.php(136): PhpBrew\ReleaseList::buildReleaseListFromOfficialSite(Object(GetOptionKit\OptionResult)) #2 phar:///usr/local/bin/phpbrew/src/PhpBrew/Tasks/FetchReleaseListTask.php(13): PhpBrew\ReleaseList->fetchRemoteReleaseList(Object(GetOptionKit\OptionResult)) #3 phar:///usr/local/bin/phpbrew/src/PhpBrew/Command/KnownCommand.php(39): PhpBrew\Tasks\FetchReleaseListTask->fetch() #4 [internal function]: PhpBrew\Command\KnownCommand->execute() #5 phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/CommandBase.php(846): call_user_func_array(Array, Array) #6 phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/Application.php(398): CL in phar:///usr/local/bin/phpbrew/src/PhpBrew/ReleaseList.php on line 171 ## jsonモジュールがないだけみたいなのでinstall $ dnf install php-json $ phpbrew known ===> Fetching release list... Downloading https://www.php.net/releases/index.php?json=1&version=8&max=100 via curl extension Downloading https://www.php.net/releases/index.php?json=1&version=7&max=100 via curl extension 8.0: 8.0.11, 8.0.10, 8.0.9, 8.0.8, 8.0.7, 8.0.6, 8.0.5, 8.0.3 ... 7.4: 7.4.24, 7.4.23, 7.4.22, 7.4.21, 7.4.20, 7.4.19, 7.4.18, 7.4.16 ... 7.3: 7.3.31, 7.3.30, 7.3.29, 7.3.28, 7.3.27, 7.3.26, 7.3.25, 7.3.24 ... 7.2: 7.2.34, 7.2.33, 7.2.32, 7.2.31, 7.2.30, 7.2.29, 7.2.28, 7.2.27 ... 7.1: 7.1.33, 7.1.32, 7.1.31, 7.1.30, 7.1.29, 7.1.28, 7.1.27, 7.1.26 ... ## phpbrewで見える最新のものをinstall $ phpbrew install 8.0.11 +default ## error出る Package 'libxml-2.0', required by 'virtual:world', not found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML_CFLAGS and LIBXML_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. ## 言われたとおりに ## see https://centos.pkgs.org/8/okey-x86_64/libxml2-devel-2.9.7-5.el8.x86_64.rpm.html $ dnf install libxml2-devel ## またerror checking for zlib >= 1.2.0.4... yes checking whether to enable bc style precision math functions... yes checking for BZip2 support... yes checking for BZip2 in default path... not found configure: error: Please reinstall the BZip2 distribution Please checkout the build log file for more details: ## see https://centos.pkgs.org/8/centos-baseos-x86_64/bzip2-devel-1.0.6-26.el8.x86_64.rpm.html $ dnf install bzip2-devel ## 次のerror and CURL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. Please checkout the build log file for more details: tail /root/.phpbrew/build/php-8.0.11/build.log [root@localhost ~]# tail /root/.phpbrew/build/php-8.0.11/build.log configure: error: Package requirements (libcurl >= 7.29.0) were not met: Package 'libcurl', required by 'virtual:world', not found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables CURL_CFLAGS and CURL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. ## see https://centos.pkgs.org/8-stream/centos-baseos-x86_64/libcurl-devel-7.61.1-18.el8.x86_64.rpm.html $ dnf install libcurl-devel ....
このあとも onigurumaがないとか色々と怒られたけど割愛。dnf install していくだけ。
ちゃんとしたやり方あるはずなんだけど見切り発車でやってしまったので結構詰まった。絶対スマートなやり方ある。
↓に必要だったものをまとめておきます。
$ dnf install php-json libxml2-devel bzip2-devel libcurl-devel readline-devel oniguruma-devel libxslt-devel libzip-devel
これで完了です。
Congratulations! Now you have PHP with 8.0.11 as php-8.0.11 * To configure your installed PHP further, you can edit the config file at /root/.phpbrew/php/php-8.0.11/etc/php.ini To use the newly built PHP, try the line(s) below: $ phpbrew use php-8.0.11 Or you can use switch command to switch your default php to php-8.0.11: $ phpbrew switch php-8.0.11
PHP8からJITが導入されて爆速化しているみたいですね。
PRみましたが、相当な量で追うのを諦めました。というよりも知識が追いついていない感。
Benchmarkには以下を使う予定
Grafanaのパスワードがわからなくなった。
タイトルの通り、adminユーザのパスワードが分からなくなって困ってしまった。
ちなみに以下の記事で構築したラズパイ上のGrafana。
英語の記事だけどここに書いてありました。(日本語訳しました。)
# ps axuf|grep grafana root 1775938 0.0 0.0 215532 796 pts/0 S+ 20:01 0:00 \_ grep --color=auto grafana grafana 1185 0.1 1.3 3124532 52104 ? Ssl 8月20 95:31 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid --packaging=rpm cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins cfg:default.paths.provisioning=/etc/grafana/provisioning
# vi /etc/grafana/grafana.ini #################################### Paths #################################### [paths] # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) ;data = /var/lib/grafana ⭐ # Temporary files in `data` directory older than given duration will be removed ;temp_data_lifetime = 24h # Directory where grafana can store logs ;logs = /var/log/grafana # Directory where grafana will automatically scan and look for plugins ;plugins = /var/lib/grafana/plugins # folder that contains provisioning config files that grafana will apply on startup and while running.
sqliteを内部で使ってるんですね。
ということでsqliteでadminユーザのパスワードを初期化します。
# sqlite3 /var/lib/grafana/grafana.db SQLite version 3.26.0 2018-12-01 12:34:55 Enter ".help" for usage hints. sqlite> update user set password = '59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6', salt = 'F3FAxVm33R' where login = 'admin'; sqlite>
Email for username: admin
Password: admin
で入力すると、パスワード変更画面が表示されてパスワードの変更&Loginができました!
やったことない手順だったのでメモ。
Apacheでロードバランシング
mod_proxy_balancerとは?
Apache2.2系から使えるようになったらL7のロードバランシング機能を持つmodule。
触れる機会があったのでちょっと調べてみる。
実際にはApacheでロードバランシングしているところを、AWSで言うELBに置き換えたいので調べてみたというところ。
ロードするmoduleは以下。
LoadModule status_module modules/mod_status.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so LoadModule proxy_http_module modules/mod_proxy_http.so
ロードバランシングの設定は以下。
<Proxy balancer://mycluster> BalancerMember http://127.0.0.1:81 retry=10 loadfactor=10 BalancerMember http://127.0.0.1:82 retry=10 loadfactor=50 </Proxy> ProxyPass /test balancer://mycluster
このように設定すると http://127.0.0.1:8080/test でLB機にアクセスした場合にBalancerMemberで指定した2つのバックエンドサーバへとアクセスを振り分けられる。
BalancerMemberのパラメータについて
パラメータ | 説明 |
---|---|
retry | コネクションを保持するためのリトライのタイムアウト値を秒単位で指定する。デフォルトで60秒。 |
loadfactor | 1~100までの値で負荷係数を重み付けできる。デフォルトで1。 |
詳細は以下
ロードバランサの管理画面
以下のように設定すると管理画面を表示することができる。
バランサマネージャと呼ぶらしい。この管理画面ではメンバを変更したり、特定のメンバをオフラインにするといった動的な管理ができる。
なので、Deny from all を指定して接続できる端末を制御する必要がある。ドメイン指定でも可能。
<Location /balancer-manager> SetHandler balancer-manager Order Deny,Allow Deny from all Allow from 127.0.0.1 </Location>
TODO
dockerで試したけど、キャプチャを取り忘れたのであとで貼ります。。。
LB用Apacheコンテナ * 1
バックエンドサーバ用Apacheコンテナ * 2
な最小構成を試してみました。
Apendix
load average
load average
「LAが急上昇しました。」とかそういうことを聞いたりする。
load averageについてこの機会におさらいかねてまとめておくことにした。
実行するタスクが増えてくるとタスクの実行待ちが発生する。
この待ち状態がプログラムの遅延状態としてload averageに表示される。
$ top top - 18:59:58 up 27 days, 20:23, 1 user, load average: 0.15, 0.30, 0.24 ⭐ Tasks: 134 total, 1 running, 133 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.9 us, 0.6 sy, 0.0 ni, 98.4 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 3797.7 total, 938.1 free, 1031.2 used, 1828.5 buff/cache MiB Swap: 488.0 total, 488.0 free, 0.0 used. 2508.8 avail Mem ## 実行した時間が違うのでload averageが異なる。 $ uptime 19:10:43 up 27 days, 20:33, 1 user, load average: 0.07, 0.14, 0.17 ⭐
load average: 0.15, 0.30, 0.24
左から順に1分、5分、15分の単位でどの程度タスクの待ち時間が発生したかを表している。
load averageが高いということは、遅延が発生しているということになるので、負荷が高いということになる。
しかし、CPU負荷なのかI/O負荷なのかはこれだけでは判断できない。
Load averageの算出処理はカーネルのコードのこの辺りから追える。
sar
Load averageからCPU負荷なのかI/O負荷なのかを見極めていく。
$ sar Linux 5.4.65-v8.2.el8 (localhost.localdomain) 2021年09月17日 _aarch64_ (4 CPU) 00時00分00秒 CPU %user %nice %system %iowait %steal %idle 00時10分00秒 all 2.14 0.00 1.09 0.17 0.00 96.60 00時20分00秒 all 1.55 0.00 0.76 0.14 0.00 97.55 00時30分00秒 all 1.61 0.00 0.81 0.14 0.00 97.45 00時40分00秒 all 1.61 0.00 0.78 0.40 0.00 97.21 00時50分00秒 all 1.62 0.00 0.79 0.18 0.00 97.41 01時00分00秒 all 1.54 0.04 0.76 0.15 0.00 97.51 01時10分00秒 all 1.61 0.00 0.80 0.34 0.00 97.24 01時20分00秒 all 1.62 0.00 0.81 0.13 0.00 97.44 01時30分00秒 all 1.60 0.00 0.80 0.34 0.00 97.26 01時40分00秒 all 1.59 0.00 0.78 0.16 0.00 97.47 01時50分01秒 all 1.57 0.00 0.77 0.20 0.00 97.46 02時00分01秒 all 1.62 0.22 0.84 0.17 0.00 97.15 02時10分00秒 all 1.67 0.00 0.83 0.32 0.00 97.18
CPU負荷
以下の項目に注目する。
- %user: ユーザモード
ユーザプログラム(アプリケーション等)で実行したCPU使用率
- %system: システムモード
カーネル(システム)で実行したCPU使用率
I/O負荷
- %iowait:
ディスクI/O待ち。スワップアウト時などに値が上昇する。
プロセスの状態
load averageが分かり、CPU使用率・I/O待ち率が判明したら各プロセスからボトルネックを見つけていく。
以前の記事で書いてある通り、プロセスの状態は以下の通り。
$ ps aux | head -1 && ps aux | grep httpd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 6849 0.0 0.1 44256 6536 ? Ss 5月30 1:40 /usr/sbin/httpd -DFOREGROUND www 225430 0.0 0.1 56460 4592 ? S 6月13 0:00 /usr/sbin/httpd -DFOREGROUND www 225431 0.0 0.1 2293576 6108 ? Sl 6月13 1:59 /usr/sbin/httpd -DFOREGROUND www 225432 0.0 0.1 2490256 6340 ? Sl 6月13 2:03 /usr/sbin/httpd -DFOREGROUND www 225433 0.0 0.1 2293576 6140 ? Sl 6月13 1:59 /usr/sbin/httpd -DFOREGROUND
STAT | 状態 | 説明 |
---|---|---|
R (Run) | TASK_RUNNING | 実行可能状態。CPUが空きさえすればいつでも実行可能 |
S (Sleep) | TASK_INTERRUPTED | 割り込み可能。入力待ち、スリープ等 |
D (Disk Sleep) | TASK_UNINTERRUPTIBLE | 割り込み不可能。主に短時間で復帰する場合の状態。ディスク入出力待ち |
Z(Zombie) | TASK_ZOMBIE | ゾンビ状態。子プロセスがexitとして親プロセスにリープされるまでの状態 |
SREに求められる知識?
SREとして働く上でどんなスキルセットが必要なのか、そして自分はどこまで知識を持っているかというのを洗い出したいので書き出してみる。
qiitaで「各社の募集要項からSREに求められるスキルをまとめた」という素晴らしいPOSTがあったので参考にしてみることにする。
大規模システムの構築・運用
DAU 10万以上のサービス(もしくはそれと同様)のインフラ運用経験(FiNC/歓迎スキル)
20,000 req/sec オーバーのAPIトラフィックを安定して処理するためのバックエンドシステムの開発、運用(mercari/業務内容)
具体的な数値が出ているのはこの辺。
mercariのTechBlogで以下のようなPOSTがあった。
高トラフィックに耐えうるシステムの構築・運用の知識とはここまでできるエンジニアと思って差し支えなさそう。
ちなみにOpenRestyについての知識は私はないので宿題にする。
経験値
- 20,000 req/secを超えるシステムの構築・運用・管理経験はある。
- 負荷試験
- 試験シナリオは直近で考えて最大でどこまで耐えられるか等、検証した経験あり
- AWS使っている案件だとELBが高スループット保証しているので問題になることはなかったと記憶している。
- ただスパイクアクセスの場合はPre-Warmingを申請が必要とかそういう経験はあったちなみにスパイクする時間はだいたい判明していた。
- AutoScalingが間に合わなくてインスタンス事前に増やしておいたりとかもあった。
クラウド
パブリッククラウド(AWS/GCP...)の経験が求められている。
AWS等クラウド環境の技術進化に興味を持ち続け、最新のサービスを当社のビジネつ実現に適切な形で、適応する提案や研究意識(BASE/必須スキル)
クラウド上でのインフラ構築経験、および、3年以上の運用経験(FiNC/必須スキル)
ここらへんが自身の経験に当てはめて考えやすい。
経験
- AWSの運用経験は2年ほど
- プライベートクラウドの運用経験は2年以上(現在進行系)。
- AWSのカンファレンスとかその他勉強会は参加しているけど、研究まではしていない。
- 研究を何と定義するかによるが、調査・仮設・実験・考察・アウトプットでそれなりに有名であること。とするとそのような経験も知名度もない。
開発スキル(プログラミングスキル)
システムのパフォーマンスや信頼性を向上させるのに必要なアプリケーション、ミドルウェアへの機能追加、バグ修正を行うためのプログラミング能力(mercari/必須スキル)
OSSの公開、コントリビュートの経験(mercari/歓迎スキル)
経験
- アプリケーションエンジニア(インフラレイヤーもかじってる)ので満たしてはいそう。
- 実際の経験を話せることが重要なので、事前に振り返って経験整理すれば問題なさそう。
- OSSの公開、コントリビュートの経験なし
- やりたいです。エンジニアのスキルを見極める分水嶺的なものと認識しているので、年内挑戦予定(3ヶ月程度しかない...)。
パフォーマンスチューニング
アプリチームと共同し、サービスのパフォーマンス改善の可視化、分析、提案(BASE/業務内容)
高速なレスポンスを実現するためのアプリケーション、ミドルウェアのパフォーマンス改善(mercari/業務内容)
経験
- 前述した通り経験あり。
- 勉強会に登壇している人達と比べたら見劣りはする。
- 直近ではここらへんを業務担当範囲にしている気がする。
ネットワーク
TCP/IP、HTTPなどのネットワークプロトコルについての基礎知識(mercari/必須スキル) ネットワークに関する基礎知識(エニグモ/必須スキル)
ここが一番難しかったです。
「TCP/IPの十分な知識がある」って何を持って証明できるかわからないのでチェックシートほしい。
— mutao.net (@mutao_net) September 25, 2021
そもそも自分の中で証明する方法を思いついていないということは知識不足ってことなのかな😂
経験についてはあとで調べて追記します。
Linux
最近自分の中で一番「キテ」いる分野。すごい面白いです。
経験
- インフラ(Linux)構築・運用経験 3年以上あり。
- Linuc Level1 取得済み(早くlevel3まで取らねば)
冗長化・分散手法
大規模サービス運用ではもはや前提となるためか、明示的に書いているところは少ないかも。
なるほど。オンプレ/クラウドといったことは抜きにしてそもそも論で分かっているかどうかを問われていそう。
経験
- 冗長化や分散手法に対する基本的な知識あり
ログ収集・解析基盤
ログ解析、モニタリング自動化経験(cybozu/歓迎スキル)
ログ(メトリクス)収集・解析基盤の開発・構築・運用(cybozu/業務内容)
データ分析を迅速に行うためのログ収集・分析基盤の構築、運用(mercari/業務内容)
もはや鉄板といった感じ。
経験
- ログ解析、運用経験あり。
- 地味にアウトプットもしている。
監視・モニタリングシステム
インフラ基盤のモニタリング・アラートシステムの開発・運用(cybozu/業務内容)
障害検知やキャパシティプランニングのためのモニタリング環境の構築、運用(mercari/業務内容)
経験
- 監視システムの構築の経験はなし。
- 0ベースで監視システム構築から入るってすごい経験。。。
- 運用経験はあります。アラート組み込んだりも経験あり。
- アラート検知の設定が悪くてオオカミ少年みたいなアラートを作ってしまった経験も恥ずかしながらある。
セキュリティ
OS セキュリティ関連の知識(cybozu/歓迎スキル)
セキュリティに関する深い知識(mercari/歓迎スキル)
経験
- 自分の中で一番弱い箇所だと思う。
- CVEを読んで脆弱性対策をするとかそういった経験はあり。
オペレーション自動化・効率化
CIや自動構成管理、オーケストレーション等の構築、運用経験(BASE/歓迎スキル) Infrastructure as Codeの運用経験、もしくは興味をお持ちの方(エニグモ/歓迎スキル) デプロイや各種オペレーション自動化ツールの開発、運用(mercari/業務内容)
これも好きな分野。効率化とか考えるの好きだし、逆に言うと非効率だったり手間がある作業はどんどん潰したい。
経験
- Ansibleでの構成管理経験あり
- Jenkins/Drone.io
RDBMS
3年以上のRDB運用経験(FiNC/必須スキル)
経験
- ざっくり言うとあり。
- Cluster構成考えるとかレプリケーションとるとかは経験なし。知識としてかじったぐらい。
コンピュータサイエンス
コンピュータサイエンスの修士またはそれに相当するスキル・経験(Retty/必須スキル)
ものすごいハードルが高い。。。大学院を修了してもいないし、そういった経験のある人とコミュニケーションをとった記憶もない気がする。
経験
- 前述の通り自分のレベルは低い。
- 体系的に学んだという実績を示すものはない。
感想
今回はqiitaに取り上げられていた募集要項の中から判断しやすいものを抜粋して自分がどのレベルにあるかざっくり探ってみました。
自分はまだまだ未熟であり、インプット・アウトプットの質と量を向上させていく必要があると感じました。業務経験も浅い気がしますね(5年目エンジニア)。
今回を気に知らないOSSも知れたので勉強の種が更に増えてモチベが上がりました。
(お家ラズパイKubernetes化計画を年内目処にやろう)
SREに求められているのは広範に渡る高いスキルだと知れたとともにSREとして働いている皆様に頭が上がりません。