2017年3月8日 星期三

Linux LVM (建立、擴充、移除LVM磁區) 操作筆記

一、建立新的LVM磁區(建立順序:PV、VG、LV)

使用 LVM 可在分割磁區時不必一次分割大量空間給各個 Partition,等日後哪個磁區空間不足時再分配之前未分配的空間或新增一顆硬碟來配給使用。

確認是否有安裝 LVM 套件:
rpm -qa lvm2

如果沒有需先安裝 lvm2 套件:
yum install -y lvm2

step:
1. 列出磁碟資訊
# fdisk -l

2. 進入磁碟分割功能
# fdisk /dev/sdb
Command (m for help): l     <--列出磁碟格式表

3. 新建一個磁區
Command (m for help): n     <--新建一個磁區 (磁區大小:20480M)

4. 變更磁碟格式 ID
Command (m for help): t     <--輸入 8e (8e磁碟格式 LVM)

5. 儲存磁區設定 & 離開磁碟格式功能
Command (m for help): w

6. 更新 Linux Kernel 分割表資訊,讓新 partition 不需重開機即可生效
# partprobe
或者
# partprobe /dev/sdb1

7. 建立 PV
# pvcreate /dev/sdb1
或者幾個磁區建立 PV
pvcreate /dev/sdb1 /dev/sdc1

8. 建立 VG
# vgcreate <vg_name> /dev/sdb1
或幾個 PV 建成一個 VG:
# vgcreate <vg_name> /dev/sdb1 /dev/sdb2/dev/sdc1

9. 建立 LV
# lvcreate -L 20476M -n testlv01 testvg    ### lvcreate -L 20476M(磁區大小) -n testlv01(LV名稱) testvg(VG名稱)
磁區大小數值會有些差異,要自己測試一下才能把剛才分割的 20GB 完全用掉。

10. 格式化 LV 磁區
查詢 LV 路徑:
# lvdisplay
格式化 testlv01
# mkfs.xfs /dev/testvg/testlv01

11. 建立掛載 LV 磁區的目錄
# mkdir /lvmdata
# mount /dev/testvg/testlv01 /lvmdata

12. 測試,COPY資到 lvmdata 底下,利用 df -h 查看變化
# df -h

補充指令:pvdisplay, vgdisplay, lvdisplay, pvscan, vgscan, lvscan



二、將 testvg 從 20480M 再加 20480M,總空間變為 40GB (將新的 PV 空間或未分配的磁碟空間加入已存在的 VG)
利用上面未分配的磁碟空間繼續作下面的練習:
1. 進入磁碟分割功能
# fdisk /dev/sdb
新增一顆硬碟
# fdisk /dev/sdc

2. 新建二個磁區
Command (m for help): n     <--利用之前未配置的空間再新建一個磁碟 (磁碟大小:20480M)

3. 變更磁碟格式 ID
Command (m for help): t     <--輸入 8e (8e磁碟格式 LVM)
因剛才又新增一個分割區,所以這邊要指定變更第2個分割區的磁碟格式 ID

4. 儲存磁區設定&離開磁碟格式功能
Command (m for help): w

5. 更新 Linux Kernel 分割表資訊,讓新 partition 不需重開機即可生效
# partporbe
# fdisk -l

6. 將分割好的磁區加入己存在的 VG
# vgextend testvg /dev/sdb2 /dev/sdc1   (testvg 是已存在的 VG)

7. 觀察 VG 磁區大小變化,原本 20GB 增加 sdb2,sdc1 後變為 60GB
# vgdisplay



三、將 testlv01 從 20480M 擴充加大到30720M (利用新加入的 VG 來擴大 LV)
1. 增加10G磁區空間到 testlv01
# lvresize -L +10240M /dev/testvg/testlv01

2. 上圖己經成功增加 LV 磁區空間,但還必須用 xfs_growfs 讓 testlv01 檔案系統擴大
# xfs_growfs /dev/testvg/testlv01     #(xfs磁碟格式指令) 



四、移除 testlv01、testvg、pv (移除 LVM 空間依循步驟)
1. umount /lvmdata
2. lvremove /dev/testvg/testlv01
3. vgchange -an testvg      # vgchange -an <VG_name> 讓 VG 不具有 Active 標誌
4. vgremove testvg
5. pvremove /dev/sdx#


五、縮小 LVM 空間 (縮小 LVM 空間前必須備份資料,否則資料將會移失)
1. 縮小 LV 空間
# lvresize -L -512M /dev/testvg/testlv01

1.1 利用 lvdispaly 觀察 LV 空間
# lvdisplay

2. 縮小 VG 空間
# umount /lvmdata
# lvremove /dev/testvg/testlv01
# vgreduce testvg /dev/sdb2

2.1 利用 vgdispaly 觀察 LVM 變化
# vgdisplay
# pvdisplay


LVM 指令列表:

2017年3月5日 星期日

CentOS 7 安裝 Plex Media Server

下載 Plex Server 套件

CentOS 64bit 套件:

安裝 Plex 套件:

設定開機啟動:
systemctl enable plexmediaserver.service
systemctl start plexmediaserver.service

到 Plex 官網註冊一個帳號:

註冊後第一次登入自己的 Plex Server 要在同一網段:
http://local_ip_address:32400/web

之後可以利用免費的 DNS 服務註冊一個網址,就可以使用網址連線了。 

設定從外部連線 Plex Server:
1.防火牆設備要設定 NAT 埠號 32400 從外部進入到內部 Plex Server
2.設定 Plex Server 使用固定連線埠號

3.在主機內新增一個資料夾存放媒體檔案,上傳多媒體檔案
mkdir /PlexMedia

4.回到 Plex Server 網頁首頁


依步驟選擇剛才新增的資料夾,到這就己經可以使用 Plex Client 軟體 或者直接利用瀏覽器連線觀賞


5.有時明明有放檔案到媒體庫,但就是無法看到檔案。可以調整一下掃描器設定試試。



2017年3月3日 星期五

openshift OC 指令部署 CentOS 7



要使用 openshift Enterprise 系統,必須先註冊一個帳號及等待開通帳號的通知

openshift 網址:
https://www.openshift.com/?sc_cid=7016000000128KfAAI&gclid=Cj0KEQiAot_FBRCqt8jVsoDKoZABEiQAqFL76AwuqrAKItlr6RUqwcFz_gxzdOuhd8_OJw6tKwjUaQ0aAtfL8P8HAQ

收到帳號開通的通知後就可以登入 openshift Enterprise WEB 介面了。

下載 OC 執行檔
for Linux
for Linux
將下載的壓縮檔解壓縮,把 oc 放到系統 path 環數變數下的任一目錄下
登入 openshift:
(openshift 右上角 <Command Line Tools> 頁面裡的 login 連結網址)
oc login https://api.preview.openshift.com --token=...click to show token...

for Windows
for Windows
將下載的壓縮檔解壓縮,把 oc.exe 放到系統 path 環數變數下的任一目錄下
開啟 DOS 視窗:
(openshift 右上角 <Command Line Tools> 頁面裡的 login 連結網址)
oc login https://api.preview.openshift.com --token= ...click to show token...

到此順利的話,就已經登入 openshift 管理後台。



部署一個空的 CentOS 7 系統
oc run centos7 --image=centos /usr/sbin/init

查尋看有哪些 pods
oc get pods

登入 pod
oc exec -it <pod name> sh

或啟動後在 WEB 上也可以登入 terminal





2017年3月1日 星期三

CentOS 7 安裝 iSCSI Server

SERVER 端:
yum 安裝 iSCSI 套件
yum install -y targetcli

防火牆如果沒有關掉,必須打開 iSCSI 所使用的 Port
firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload

啟動 iSCSI 服務
systemctl start target.service
systemctl enable target.service

建一個資料夾存放測試的虛擬磁碟影像檔
mkdir /iscsi_disks

產生二個虛擬磁碟影像檔
dd if=/dev/zero of=/iscsi_disks/linux-disk.img bs=1M count=1024
dd if=/dev/zero of=/iscsi_disks/windows-disk.img bs=1M count=1024

登入 iSCSI 管理介面
targetcli

iSCSI 的設定架構


建立 iSCSI 檔案連結要分享的虛擬磁碟影像檔
iSCSI 磁碟有四種類型可以選擇:
cd backstores/
fileio/ create linux-disk /iscsi_disks/linux-disk.img
block/ create windows-disk /iscsi_disks/windows-disk.img
類型:
block         #用 block 方式分享
fileio          #將檔案建於 file system 之上, 再通過 iSCSI 當做 block device 分享出去
pscsi         #連結的設備原本就是 iSCSI 設備時,選 pscsi
remdisk    #不需長久儲存時,可用 ramdisk 分享

建立 iSCSI target 名稱
cd /iscsi
iscsi> create iqn.2017-03.company.tw:linux.disk     #這邊的網域名稱要反轉輸入,也可以直接輸入 create 讓它自動產生
iscsi> create iqn.2017-03.company.tw:windows.disk

建立 ACL(access control list) 存取清單,iSCSI 預設是不讓任何人存取,所以必須設定存取名單
cd iscsi/iqn.2017-03.company.tw:linux.disk/tpg1/acls
create iqn.2017-03.company.tw:linux-pc    #client 連線時所要設定的[啟動器名稱 || InitiatorName]
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1/acls
create iqn.2017-03.company.tw:windows-pc

連結 LUN
cd /iscsi/iqn.2017-03.company.tw:linux.disk/tpg1/luns
create /backstores/fileio/linux-disk
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1/luns
create /backstores/block/windows-disk

建立 portal (iSCSI 預設會建立一個 0.0.0.0:3260 如無特殊要求使用預設值即可)
cd /iscsi/iqn.2017-03.company.tw:linux.disk/tpg1/portals
create 192.168.60.160    #可以直接輸入 create 讓它自動產生
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1/portals
create 192.168.60.160

若出現 <Could not create NetworkPortal in configFS>,表示系統已先建立 0.0.0.0:3260 的 portal
先刪除舊的 portal 建立新的
cd /iscsi/iqn.2017-03.company.tw:linux.disk/tpg1/portals/
delete 0.0.0.0 3260

存檔、離開
cd /
saveconfig
exit

完成的設定:


其他設定:
關閉 tpg1 密碼驗證       #連線時,server messages log 出現 <Target is enforcing iSCSI Authentication, login failed> 登入失敗,可關閉 authentication 驗證來測試
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1
set attribute authentication=0

關閉 tpg1 的 ACL
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1
set attribute generate_node_acls=0

如要設定 iSCSI 連線密碼
targetcli
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1/acls/iqn.2017-03.company.tw:windows-pc/
#Linux Client 設定密碼
set auth userid=usr
set auth password=pwd
get auth


Windows 用戶端:
(Windows 7 正常連線,Windows 10、2012 要一直重試,需要一點運氣)
控制台 > 系統管理工具 > iSCSI 啟動器 > 設定 <啟動器名稱>
輸入:
iqn.2017-03.company.tw:windows-pc    #名稱要與 Server iSCSI 建立 ACL 設定的名稱相同
(為了測試方便,Linux iSCSI Server 裡把 windows.disk 的 password 驗證關閉了)



電腦 > 管理 > 磁碟管理,會多出一個<未配置>的磁區




Linux 用戶端:
安裝 iSCSI Client 軟體
yum install -y iscsi-initiator-utils

編輯設定檔
vi /etc/iscsi/initiatorname.iscsi
內容:
InitiatorName=iqn.2017-03.company.tw:linux-pc    #名稱要與 Server iSCSI 建立 ACL 設定的名稱相同

重啟用戶端
systemctl restart iscsid.service

搜找可用的 iscsi server 分享的設備
iscsiadm -m discovery -t st -p 192.168.60.160


登入or登出 iscsi 設備
iscsiadm -m node -T iqn.2017-03.company.tw:linux.disk -p 192.168.60.160 --[login | logout]

觀察線後是否有多出一個硬碟
# fdisk -l

# file /dev/sdb

格式化及掛載 iscsi 硬碟
mkdir /iscsidisk
mkfs.xfs /dev/sdb
mount /dev/sdb /iscsidisk

開機掛載 iSCSI
先查詢 id 碼:
blkid | grep /dev/sdb
/dev/sdb: UUID="eb9cbf2f-fce8-413a-b770-8b0f243e8ad6" TYPE="xfs"

vi /etc/fstab
/dev/sdb: UUID=eb9cbf2f-fce8-413a-b770-8b0f243e8ad6 /iscsidisk xfs default,_netdev 0 0

刪掉不要的iscsi target

# iscsiadm -m node -o delete -T iqn.2017-03.company.tw:linux.disk



2017年2月21日 星期二

MikroTik RouterOS L2TP over IPSec 連線設定

寫得太麻煩了,直接看圖

L2TP 設定:
IP >> Pool 新增一個給 L2TP 使用的 IP 網段(使用的 IP address: 192.168.125.100~192.168.125.200 )












PPP >> Profiles 按 + 新增一個 L2TP Profile























PPP >> Interface 啟用 L2TP Server














IPSec 設定:
IP >> IPSec >> Peer
按 + 新增一筆設定

IP >> IPSec >> Proposals 按 + 新增


新增使用者帳號:
PPP >> Secret 新增一個使用者帳號
























防火牆設定:
IP >> Firewall >> NAT 新增允許透過 VPN 上外網














IP >> Firewall >> Mangle 新增允許透過 VPN 內網













設定完成內、外網都可以連通。




2017年2月18日 星期六

Samba DC 使用指令修改 GPO 密碼原則

    Samba DC 可以用 RSAT 連線管理、修改群組原則,但發現<密碼原則>的套用一直有問題。
直接在 Samba DC 上用指令查看,發現用 RSAT 修改<密碼原則>後和在 Samba DC 用指令查詢的結果不同(不知是不是只有我有發生這個問題???)。
下圖是原有的<密碼原則>預設值:
但其實我己經用 RSAT 連線修改過了:
看來是 RSAT 修改的沒有套用到 Samba DC 上。

只好直接在 Samba DC 上直接用指令修改:
samba-tool domain passwordsettings set --complexity=off    #是否啟用密碼複雜度
samba-tool domain passwordsettings set --history-length=0   #記錄幾組歷史密碼
samba-tool domain passwordsettings set --min-pwd-age=0    #最短密碼使用天數
samba-tool domain passwordsettings set --max-pwd-age=0   #最長密碼使用天數
samba-tool domain passwordsettings set --min-pwd-length=6   #密碼最少字元長度


2017年2月15日 星期三

Kubernetes SSL 連線設定

主機環境:
vi /etc/hosts
192.168.60.153  c7-k8s01 c7-k8s01.tw.company  #master & docker
192.168.60.154  c7-k8s02 c7-k8s02.tw.company
192.168.60.155  c7-k8s03 c7-k8s03.tw.company
測試時,我是在 DNS Server 上加上正、反解且由 DHCP Server 配發 IP,所以還在 ifcfg-eth0 裡加入
DOMAIN=tw.company
SEARCH=tw.company
這樣就不用在 hosts 檔案加主機 IP 對應

master 主機執行的步驟:
建立一個暫存 key 檔案資料夾
mkdir kube-key
cd kube-key

1. 建立 kubernetes cluster root CA  憑證:
openssl genrsa -out ca-key.pem 2048
openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem -subj "/CN=kube-ca"

2. 新增 OpenSSL 設定檔 openssl.conf:
vi openssl.cnf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = c7-k8s01.tw.company
IP.1 = 192.168.60.153

3. 產生 apiserver key & apiserver csr 憑證:
openssl genrsa -out apiserver-key.pem 2048
openssl req -new -key apiserver-key.pem -out apiserver.csr -subj "/CN=kube-apiserver" -config openssl.cnf

4. 依據 root ca key,crt 和 server.csr 產生 server.crt:
openssl x509 -req -in apiserver.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out apiserver.pem -days 365 -extensions v3_req -extfile openssl.cnf

5. 在master主機上先幫所有的 node 建立一個 OpenSSL 設定檔(openssl.conf)並產生 key & csr 憑證:
c7-k8s01 openssl.conf(c7-k8s01 是 master&docker service 在同一台,所以也必須執行下列動作):
[root@c7-k8s01 kube-key]# mkdir c7-k8s01 c7-k8s02 c7-k8s03
[root@c7-k8s01 kube-key]# vi c7-k8s01/openssl-c7-k8s01.cnf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = c7-k8s01.tw.company
IP.1 = 192.168.60.153

c7-k8s01 key & csr:
[root@c7-k8s01 kube-key]# openssl genrsa -out c7-k8s01/c7-k8s01-key.pem 2048
[root@c7-k8s01 kube-key]# openssl req -new -key c7-k8s01/c7-k8s01-key.pem -out c7-k8s01/c7-k8s01.csr -subj "/CN=c7-k8s01.tw.company" -config c7-k8s01/openssl-c7-k8s01.cnf
[root@c7-k8s01 kube-key]# ls c7-k8s01
c7-k8s01.csr  c7-k8s01-key.pem  openssl-c7-k8s01.cnf

產生 c7-k8s01 root ca crt 憑證:
[root@c7-k8s01 kube-key]# openssl x509 -req -in c7-k8s01/c7-k8s01.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out c7-k8s01/c7-k8s01.pem -days 365 -extensions v3_req -extfile c7-k8s01/openssl-c7-k8s01.cnf
[root@c7-k8s01 kube-key]# ls c7-k8s01
c7-k8s01.csr  c7-k8s01-key.pem  c7-k8s01.pem  openssl-c7-k8s01.cnf
(重覆<步驟 5>為其他 node 產生憑證檔案)

6. 到這個步驟在 kubernetes cluster master 上應該會有如下列的 SSL 憑證檔案:
[root@c7-k8s01 kube-key]# ls -lR
-rw-r--r--. 1 root root 1045 Nov 15 22:04 apiserver.csr
-rw-r--r--. 1 root root 1679 Nov 15 22:04 apiserver-key.pem
-rw-r--r--. 1 root root 1143 Nov 15 22:05 apiserver.pem
-rw-r--r--. 1 root root 1679 Nov 15 21:53 ca-key.pem
-rw-r--r--. 1 root root 1147 Nov 15 21:53 ca.pem
-rw-r--r--. 1 root root 17 Nov 15 22:39 ca.srl
drwxr-xr-x. 2 root root 98 Nov 15 22:34 c7-k8s02
drwxr-xr-x. 2 root root 98 Nov 15 22:37 c7-k8s03
-rw-r--r--. 1 root root 319 Nov 15 21:56 openssl.cnf

./c7-k8s01:
-rw-r--r--. 1 root root 261 Nov 15 22:32 openssl-c7-k8s01.cnf
-rw-r--r--. 1 root root 997 Nov 15 22:33 c7-k8s01.csr
-rw-r--r--. 1 root root 1679 Nov 15 22:33 c7-k8s01-key.pem
-rw-r--r--. 1 root root 1094 Nov 15 22:34 c7-k8s01.pem

./c7-k8s02:
-rw-r--r--. 1 root root 261 Nov 15 22:32 openssl-c7-k8s02.cnf
-rw-r--r--. 1 root root 997 Nov 15 22:33 c7-k8s02.csr
-rw-r--r--. 1 root root 1679 Nov 15 22:33 c7-k8s02-key.pem
-rw-r--r--. 1 root root 1094 Nov 15 22:34 c7-k8s02.pem

./c7-k8s03:
-rw-r--r--. 1 root root 260 Nov 15 22:36 openssl-c7-k8s03.cnf
-rw-r--r--. 1 root root 997 Nov 15 22:37 c7-k8s03.csr
-rw-r--r--. 1 root root 1679 Nov 15 22:36 c7-k8s03-key.pem
-rw-r--r--. 1 root root 1094 Nov 15 22:37 c7-k8s03.pem

變更 master node 和其他 node 套用 pem 格式的 ssl 憑證:
Master Node (c7-k8s01):
7. 複製產生的 pem 格式的 ssl 檔案到 /etc/kubernetes/ssl 資料夾:
[root@c7-k8s01 kube-key]# mkdir -p /etc/kubernetes/ssl
[root@c7-k8s01 kube-key]# cd /etc/kubernetes/ssl
[root@c7-k8s01 ssl]# cp /root/kube-key/ca.pem .
[root@c7-k8s01 ssl]# cp /root/kube-key/apiserver.pem .
[root@c7-k8s01 ssl]# cp /root/kube-key/apiserver-key.pem .
[root@c7-k8s01 ssl]# ls -l
-rw-r--r--. 1 root root 1679 Nov 15 22:46 apiserver-key.pem
-rw-r--r--. 1 root root 1143 Nov 15 22:46 apiserver.pem
-rw-r--r--. 1 root root 1147 Nov 15 22:46 ca.pem

8. 新增一個 yaml 格式的 kubeconfig 配置檔:
[root@c7-k8s01 ~]# vi /etc/kubernetes/cm-kubeconfig.yaml
apiVersion: v1
kind: Config
clusters:
- name: local
  cluster:
    certificate-authority: /etc/kubernetes/ssl/ca.pem
users:
- name: controllermanager
  user:
    client-certificate: /etc/kubernetes/ssl/apiserver.pem
    client-key: /etc/kubernetes/ssl/apiserver-key.pem
contexts:
- context:
    cluster: local
    user: controllermanager
  name: kubelet-context
current-context: kubelet-context

9. 修改 master node 上的 controll-manager, scheduler and apiserver 服務設定:
(因為 controll-manager, scheduler and apiserver 在同一台且使用不安全的 8080 port)
[root@c7-k8s01 ssl]# vi /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=https://192.168.60.153:6443"

[root@c7-k8s01 ssl]# vi /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--bind-address=0.0.0.0 --insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--secure-port=6443 --insecure-port=8080"
#KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.60.153:2379"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.60.153:2379,http://192.168.60.154:2379,http://192.168.60.155:2379"    #ETCD cluster
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_API_ARGS="--client-ca-file=/etc/kubernetes/ssl/ca.pem --tls-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem --tls-cert-file=/etc/kubernetes/ssl/apiserver.pem --service-account-key-file=/etc/kubernetes/ssl/apiserver-key.pem"

[root@c7-k8s01 ssl]# vi /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--service-account-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem --root-ca-file=/etc/kubernetes/ssl/ca.pem --master=http://192.168.60.153:8080 --kubeconfig=/etc/kubernetes/cm-kubeconfig.yaml"

[root@c7-k8s01 ssl]# vi /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--master=http://192.168.60.153:8080 --kubeconfig=/etc/kubernetes/cm-kubeconfig.yaml"

重新啟動相關的 services:
for SERVICE in kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICE
systemctl is-active $SERVICE
done

10. 觀察所有 services 狀態:
for SERVICE in kube-controller-manager kube-scheduler kube-apiserver; do
systemctl status $SERVICE -l
done

11. 確認 master node ssl 憑證是否正確配置:
[root@c7-k8s01 ssl]# curl https://192.168.60.153:6443/api/v1/nodes --cert /etc/kubernetes/ssl/apiserver.pem --key /etc/kubernetes/ssl/apiserver-key.pem --cacert /etc/kubernetes/ssl/ca.pem

以下步驟在其他 nodes 上執行(c7-k8s01(master&docker在同一台,所以也必須執行下列動作),c7-k8s02,c7-k8s03):
12. 複製產生的 pem 格式的 ssl 檔案到 /etc/kubernetes/ssl 資料夾:
master node 上有 docker service 在同一台,所以也必須執行下列動作:
[root@c7-k8s01 ~]# cd /etc/kubernetes/ssl
[root@c7-k8s01 ssl]# cp /root/kube-key/c7-k8s01/*.pem .
[root@c7-k8s01 ssl]# ln -s c7-k8s01.pem worker.pem
[root@c7-k8s01 ssl]# ln -s c7-k8s01-key.pem worker-key.pem
[root@c7-k8s01 ssl]# ls
apiserver-key.pem  apiserver.pem  c7-k8s01-key.pem  c7-k8s01.pem  ca.pem  worker-key.pem  worker.pem

slave node:
[root@c7-k8s02 ~]# mkdir -p /etc/kubernetes/ssl/
[root@c7-k8s02 ~]# cd /etc/kubernetes/ssl/
[root@c7-k8s02 ssl]# scp root@c7-k8s01:/root/kube-key/ca.pem .
root@c7-k8s01's password:
ca.pem 100% 1147 1.1KB/s 00:00

[root@c7-k8s02 ssl]# scp root@c7-k8s01:/root/kube-key/c7-k8s02/*.pem .    #要注意變更對應的資料夾
root@c7-k8s01's password:
c7-k8s02-key.pem 100% 1679 1.6KB/s 00:00
c7-k8s02.pem 100% 1094 1.1KB/s 00:00

[root@c7-k8s02 ssl]# ls
c7-k8s02-key.pem  c7-k8s02.pem  ca.pem  worker-key.pem  worker.pem

13. 新增連結檔:
[root@c7-k8s02 ssl]# ln -s c7-k8s02.pem worker.pem
[root@c7-k8s02 ssl]# ln -s c7-k8s02-key.pem worker-key.pem

14. 新增一個 yaml 格式的 worker-kubeconfig 配置檔:
[root@c7-k8s02 ssl]# vi /etc/kubernetes/worker-kubeconfig.yaml
apiVersion: v1
kind: Config
clusters:
- name: local
  cluster:
    certificate-authority: /etc/kubernetes/ssl/ca.pem
users:
- name: kubelet
  user:
    client-certificate: /etc/kubernetes/ssl/worker.pem
    client-key: /etc/kubernetes/ssl/worker-key.pem
contexts:
- context:
    cluster: local
    user: kubelet
  name: kubelet-context
current-context: kubelet-context

15. 修改其他 node 上的 docker kubelet kube-proxy 服務設定:
[root@c7-k8s02 ssl]# vi /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=https://192.168.60.153:6443"

[root@c7-k8s02 ssl]# vi /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=c7-k8s02"
KUBELET_API_SERVER="--api-servers=https://192.168.60.153:6443"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS="--cluster-dns=192.168.60.153 --cluster-domain=tw.company --tls-cert-file=/etc/kubernetes/ssl/worker.pem --tls-private-key-file=/etc/kubernetes/ssl/worker-key.pem --kubeconfig=/etc/kubernetes/worker-kubeconfig.yaml"

[root@c7-k8s02 ssl]# vi /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/worker-kubeconfig.yaml"

重新啟動相關的 services:
[root@c7-k8s02 ssl]# systemctl restart docker kubelet kube-proxy
[root@c7-k8s02 ssl]# systemctl status docker kubelet kube-proxy -l

16. 確認其他 node  ssl 憑證是否正確配置 :
[root@c7-k8s02 ssl]# curl https://192.168.60.153:6443/api/v1/nodes --cert /etc/kubernetes/ssl/worker.pem --key /etc/kubernetes/ssl/worker-key.pem --cacert /etc/kubernetes/ssl/ca.pem

建立 pod、service 看能否正常運作(可到 https://hub.docker.com/u/kubeguide/ 下載範例測試)
redis-frontend-controller.yaml
redis-frontend-service.yaml
redis-master-controller.yaml
redis-master-service.yaml
redis-slave-controller.yaml
redis-slave-service.yaml

kubectl create -f redis-xxxxxxxxx.yaml

安裝後,利用瀏覽器連線 http://kube_host_ip:30001 可以看到 Hello World 及輸入視窗,這表示 kubernetes 應該已正常運作了。

Kubernetes 主機系統資源使用情況,可以安裝
kube-ui-rc.yaml
kube-ui-svc.yaml

安裝後,利用瀏覽器連線
http://kube_master_host_ip:8080/api/v1/proxy/namespaces/kube-system/services/kube-ui/#/dashboard/
就可以看到每個 node 的系統使用狀態。


PULL 一個 nginx 來試試,先建立兩個 yaml 格式的設定檔
vi nginx-rc.yaml
內容:
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  replicas: 1
  selector:
    name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

vi nginx-svc.yaml
內容:
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30002    #NodePort 連接埠範圍限制在 30000~32767 Port,超出 Service 建立會失敗
  selector:
    name: nginx

執行:
kubectl create -f nginx-rc.yaml
kubectl create -f nginx-svc.yaml

觀察 nginx 建立的情況:
[root@c7-k8s01 ~]# kubectl get rc nginx -o wide
NAME      DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)   SELECTOR
nginx     3         3         3         30m       nginx          nginx      name=nginx

[root@c7-k8s01 ~]# kubectl get service nginx -o wide
NAME      CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE       SELECTOR
nginx     10.254.147.10   <nodes>       80/TCP    25m       name=nginx

增加或減少 RC 數量
kubectl scale rc nginx --replicas=3    #增加 nginx RC 為三個

連線試試
http://192.168.60.153:30002

正常運行 nginx 時,可以看到 歡迎頁面




CubeCOS 虛擬機刪除網路介面,且主機內沒有 virtio 驅動程式成為孤島主機時,進行 virtio iso 掛載流程

 # 當 CubeCOS 虛擬機刪除網路介面,且主機內沒有 virtio 驅動程式成為孤島主機時,進行 virtio iso 掛載流程。 # 步驟一:確認目標虛擬機的底層名稱 # 在 Compute Node(計算節點)上列出運行中的 instance,並反查對應的 OpenSt...