2018年4月15日 星期日

[Docker] Docker常用指令整理

Docker常用指令
1. 啟動容器
docker run -it  {{container}}  bash
  • --rm: 當container死的時候會將persistance的部分都砍掉
  • -d: daemon, 會將container以背景(background)方式執行

2. 執行cmd
docker exec -it  {{container}} cmd

3. 看container目前執行的process
docker top {{container}}

4. 看container的metrics
docker stats xxxxx
sudo docker stats $(sudo docker ps -q --format {{.Names}})

5. 重啟目前所有正在運行的docker
sudo docker ps -q | sudo xargs docker restart

6. docker即時監控指令(via name)
sudo docker ps | awk '{if (NR!=1){print $NF}}' | sudo xargs docker stats
OR
sudo docker stats $(sudo docker ps | awk '{if(NR!=1){print $NF}}')

7. 刪除<none>的container (dangling)
sudo docker rmi -f $(sudo docker images -f 'dangling=true' -q)



8. 若-e跟--env-file同時存在,則會以-e為優先

9. 表列特定名稱的container
sudo docker ps -f name={{keyword}}

[OpenStack][Devstack] Devstack的db backend選擇

Devstack的db backend選擇,需於local.conf中宣告:



#mysql
enable_service mysql

#mariadb
enable_service mysql

#postgresql

enable_service postgresql 

WARNING: Use of postgresql in devstack is deprecated, and will be removed during the Pike cycle


但於OpenStack TC的某次會議中討論提到,由於目前mysql /mariadb的使用社群佔最大宗,所以postgreSQL的部分專案於開發時將不進行驗證
https://governance.openstack.org/tc/resolutions/20170613-postgresql-status.html



[OpenStack][Devstack] Pike版Devstack安裝

[部署模式]

  • AIO
  • Multinode
[Screen操作指令]

# 重啟DEVSTACK特定服務
1. screen -dR # restach screen session
2. CTRL+a+" #選擇你要切換的分頁  [PS: CTRL+a為screen的功能鍵]
3. CTRL+C #中斷目前服務
4. 方向鍵往上重新執行剛被中斷的指令
5. 打完收工 CTRL+d #跳出screen

[Misc]
# 重新掛載loop device
sudo losetup -a  # 顯示目前所有掛載的loop device
sudo losetup -d <device> # detach loop device
  • sudo losetup -d /dev/loop0
# cinder loop device
因為 cinder是使用local file 跟loop device來建 vg,而重開機會讓loop device全部 detach,所以要手動建回來,否則 cinder volume會抱怨找不到lvm
  • sudo losetup -f --show /opt/stack/data/stack-volumes-default-backing-file
  • sudo losetup -f --show /opt/stack/data/stack-volumes-lvmdriver-1-backing-file
  • sudo vgscan

[Pike] DevStack Changelogs

  1. pike版已用systemd unit的執行方式來運行openstack服務,包含apache2也是  (不再使用傳統的screen)
  2. 表列openstack服務
    • 表列所有devstack的運行服務: sudo systemctl list-units devstack*
    • 表列nova系列服務: sudo systemctl list-units devstack@n-*
    • 同時操作nova服務:  sudo systemctl (status/start/restart/enable/disable) devstack@n-*
    • 同時操作整個devstack: sudo systemctl restart devstack@*
  3. 查詢openstack服務log
    • sudo journalctl -f --unit devstack@<服務>.service  
      • -f: following
    • sudo journalctl -a --unit devstack@<服務>.service 
      • -a: all
  4. Debugging skills
    • Local (以nova-scheduler為例)
      1. 先stop服務: sudo systemctl stop devstack@n-sch.service
      2. 設定pdb: import pdb; pdb.set_trace()
      3. 手動啟動服務來偵錯:  /usr/local/bin/nova-scheduler --config-file /etc/nova/nova.conf
    • Remote 

[OpenStack][Devstack] 線上調大DevStack Cinder Volume的空間之作法


由於devstack的cinder volume是用loop device來達成

  1. 預設使用的loop deivce的file路徑: 
    • 用losetup -a得知為/opt/stack/data/stack-volumes-lvmdriver-1-backing-file
  2. 用dd建立dummy empty file: 
    • sudo dd if=/dev/zero of=/opt/stack/data/stack-volumes-lvmdriver-1-backing-file-extend   bs=1 count=0 seek=500G #假設建立500G
  3. 將duumy file掛載loop device上
    • loop_dev=$(sudo losetup -f) # 會找個可用數字掛,假設是/dev/loop3
    • sudo losetup ${loop_dev} /opt/stack/data/stack-volumes-lvmdriver-1-backing-file-extend 
  4. 格式化loop device: sudo fdisk /dev/loop3
    • 執行指令依序為: n, p, 1, ENTER, ENTER, t, 8e, w
  5. 建立PV: sudo pvcreate /dev/loop3
  6. 加大原本的VG stack-volumes-lvmdriver-1: sudo vgextend  stack-volumes-lvmdriver-1 /dev/loop3
  7. 驗證操作: 可以用pvs或者vgdisplay查詢上述的操作是否已經增大空間