kubernetesをkubeadmで構築する(自宅PC環境/CentOS7)

前書き

kubernetes 環境構築作業メモです。
自宅設置の PC 3台に CentOS 7 をインストールし、その上に kubeadm で k8s v1.8.5 を構築します。

参考 URL:https://github.com/cookeem/kubeadm-ha

基本的には参考 URL の内容を実施していくだけです。
ただし、以下に相違があります。

  • kubernetes のバージョン
  • ネットワークを二つに分割(VLAN1 / VLAN12)
  • etcd(docker コンテナではなく、ホストにインストール)
  • network addon(flannel ではなく kube-router を採用)

 
今回の記事では etcd 以外は冗長性を持たない構成を作成して終わりです。
最終的には高可用性クラスタ構築を目指します。
 
 
 

構成

ソフトウェア

構築したときに使用した各ソフトウェアバージョンは次の通りです。

OS

CentOS 7.4 です。

[root@k8s-master1 ~]# uname -a
Linux k8s-master1 3.10.0-693.11.1.el7.x86_64 #1 SMP Mon Dec 4 23:52:40 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@k8s-master1 ~]#
[root@k8s-master1 ~]#
[root@k8s-master1 ~]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
[root@k8s-master1 ~]#

 
 

kubeadm

v1.8.5 です。

[root@k8s-master1 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.5", GitCommit:"cce11c6a185279d037023e02ac5249e14daa22bf", GitTreeState:"clean", BuildDate:"2017-12-07T16:05:18Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
[root@k8s-master1 ~]#
[root@k8s-master1 ~]#
[root@k8s-master1 ~]#
[root@k8s-master1 ~]# kubelet --version
Kubernetes v1.8.5
[root@k8s-master1 ~]#

 
 

docker

1.12.6 です。

[root@k8s-master1 ~]# docker --version
Docker version 1.12.6, build 85d7426/1.12.6
[root@k8s-master1 ~]#

 
 

全体のバージョン確認。

[root@k8s-master1 ~]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master1 Ready master 20h v1.8.5 CentOS Linux 7 (Core) 3.10.0-693.11.1.el7.x86_64 docker://1.12.6
k8s-master2 Ready 18h v1.8.5 CentOS Linux 7 (Core) 3.10.0-693.11.1.el7.x86_64 docker://1.12.6
k8s-master3 Ready 18h v1.8.5 CentOS Linux 7 (Core) 3.10.0-693.11.1.el7.x86_64 docker://1.12.6
[root@k8s-master1 ~]#

 
 

ハードウェア

 

PC(もしくはサーバ)

自宅で使ってるのは以下の機器。
DN2820FYK x3台

古いし高いしイイとこないのでこっちのがおすすめ。
BOXNUC6CAYH

SSD とかメモリが入ってないので、ちょちょいと付けておくことが必要。
また、ネットワークの冗長化のため、USB 3.0 対応 1Gbps NIC を接続しています。
 
 

ネットワーク

Switch は VLAN が作成できるものを使用しています。
これなんかは安くて検証にもってこい。

 
 
 

ネットワーク構成

物理構成

f:id:byoRF:20171211225218p:plain
物理構成
 
 

ネットワーク情報

ホスト名 IP アドレス(vlan12) サブネットマスク IP アドレス(vlan1) サブネットマスク DGW
k8s-master1 192.168.12.21 255.255.255.0 192.168.1.21 255.255.255.0 192.168.12.1
k8s-master2 192.168.12.22 255.255.255.0 192.168.1.21 255.255.255.0 192.168.12.1
k8s-master3 192.168.12.23 255.255.255.0 192.168.1.21 255.255.255.0 192.168.12.1

 
VLAN12 をサービス用、VLAN1 を管理用で使用する想定です。
 
 

設定

事前にやったこと

以下省略。省く…甘美な響きだ。

  • PC に CentOS 7 インストール(最小インストールしています)
  • CentOS 7 のネットワーク設定
    • bonding 設定 ⇒ mode=1 でのアクティブ/スタンバイ
    • VLAN インターフェースを作成(VLAN12)

 

/etc/hosts の設定

各ホストに以下を設定します。

[root@k8s-master1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.12.21 k8s-master1
192.168.12.22 k8s-master2
192.168.12.23 k8s-master3
192.168.1.21 etcd-master1
192.168.1.22 etcd-master2
192.168.1.23 etcd-master3
[root@k8s-master1 ~]#

 
 

/etc/sysctl.d/k8s.conf 作成

net.bridge.bridge-nf-call-iptables=1 を設定する。

[root@k8s-master1 kube-system]# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables=1
[root@k8s-master1 kube-system]#

 
 
 

etcd のインストール

参照したページには、etcd は docker で用意されていました。
が、ここでは物理ホストに直接インストールすることに。
各ホストで実施します。

[root@k8s-master1 ~]# yum install etcd

 
 
 

etcd 設定

各ホストの設定値は以下のようになっています。
 
 

k8s-master1

[root@k8s-master1 kube-system]# grep -v "#" /etc/etcd/etcd.conf
ETCD_NAME=master1
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.21:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd-master1:2380"
ETCD_INITIAL_CLUSTER="master1=http://etcd-master1:2380,master2=http://etcd-master2:2380,master3=http://etcd-master3:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
[root@k8s-master1 kube-system]#

k8s-master2

[root@k8s-master2 ~]# grep -v "#" /etc/etcd/etcd.conf
ETCD_NAME=master2
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.22:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd-master2:2380"
ETCD_INITIAL_CLUSTER="master1=http://etcd-master1:2380,master2=http://etcd-master2:2380,master3=http://etcd-master3:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
[root@k8s-master2 ~]#

k8s-master3

[root@k8s-master3 ~]# grep -v "#" /etc/etcd/etcd.conf
ETCD_NAME=master3
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.23:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd-master3:2380"
ETCD_INITIAL_CLUSTER="master1=http://etcd-master1:2380,master2=http://etcd-master2:2380,master3=http://etcd-master3:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
[root@k8s-master3 ~]#

 
 
設定が終わったら etcd を起動させます。また、自動起動の設定も実施します。 各ホストで実施します。

[root@k8s-master1 ~]# systemctl start etcd
[root@k8s-master1 ~]# systemctl enable etcd

 
 
 

■ etcd のステータス確認

etcdctl member list
etcdctl cluster-health
にて etcd のステータスを確認できます。

[root@k8s-master1 ~]# etcdctl member list
176c5d55dc8efaeb: name=master3 peerURLs=http://etcd-master3:2380 clientURLs=http://0.0.0.0:2379 isLeader=false
77d1f703b507c3c8: name=master2 peerURLs=http://etcd-master2:2380 clientURLs=http://0.0.0.0:2379 isLeader=false
81a27fbc991b23bf: name=master1 peerURLs=http://etcd-master1:2380 clientURLs=http://0.0.0.0:2379 isLeader=true
[root@k8s-master1 ~]#

[root@k8s-master1 ~]# etcdctl cluster-health
member 176c5d55dc8efaeb is healthy: got healthy result from http://0.0.0.0:2379
member 77d1f703b507c3c8 is healthy: got healthy result from http://0.0.0.0:2379
member 81a27fbc991b23bf is healthy: got healthy result from http://0.0.0.0:2379
cluster is healthy
[root@k8s-master1 ~]#

 
 
 

kubeadm、kubelet インストール

yumリポジトリを追加します。 各ホストに追加します。

[root@k8s-master1 kube-system]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
[root@k8s-master1 kube-system]#

 
 
kubeadm kubectl kubelet、ついでに git もインストール。
各ホストで以下を実施します。

[root@k8s-master1 ~]# yum install kubeadm kubectl kubelet git

 
 
swap をオフにしないと kubedm を実行できません
各ホストで以下を実施し swap をオフにします。

 
 

[root@k8s-master1 ~]# swapoff

[root@k8s-master1 ~]# cat /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
UUID=fb09f86c-f3ca-4fc1-9787-fa413fc9ab33 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
#/dev/mapper/centos-swap swap swap defaults 0 0 ★
[root@k8s-master1 ~]#

 
 
 

kubeadm 用設定ファイルを作成

今回の環境用にこんな内容で作成します。

[root@k8s-master1 ~]# cat kubeadm-init.yaml
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
kubernetesVersion: v1.8.5
networking:
podSubnet: 10.244.0.0/16
apiServerCertSANs:
- k8s-master1
- k8s-master2
- k8s-master3
- 192.168.12.21
- 192.168.12.22
- 192.168.12.23
- 192.168.12.20
etcd:
endpoints:
- http://192.168.1.21:2379
- http://192.168.1.22:2379
- http://192.168.1.23:2379
[root@k8s-master1 ~]#

 
 
 

■ kubernetes cluster 作成

k8s-master1 にて、kubeadm init --config=./kubeadm-init.yaml を実行します。

[root@k8s-master1 ~]# kubeadm init --config=./kubeadm-init.yaml
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.8.5
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks
[preflight] Starting the kubelet service
[kubeadm] WARNING: starting in 1.8, tokens expire after 24 hours by default (if you require a non-expiring token use --token-ttl 0)
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [k8s-master1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local k8s-master1 k8s-master2 k8s-master3] and IPs [10.96.0.1 192.168.1.21 192.168.1.21 192.168.1.22 192.168.1.23 192.168.1.20]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "scheduler.conf"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests"
[init] This often takes around a minute; or longer if the control plane images have to be pulled.
[apiclient] All control plane components are healthy after 32.503369 seconds
[uploadconfig]?Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[markmaster] Will mark node k8s-master1 as master by adding a label and a taint
[markmaster] Master k8s-master1 tainted and labelled with key/value: node-role.kubernetes.io/master=""
[bootstraptoken] Using token: 9fcc0b.9ee48b9ac705f035
[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: kube-dns
[addons] Applied essential addon: kube-proxy

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

kubeadm join --token 9fcc0b.9ee48b9ac705f035 192.168.1.21:6443 --discovery-token-ca-cert-hash sha256:200e96581f80af666132552473853e7716d838d75b404c8f034787c25b1917fc

[root@k8s-master1 ~]#

 
 
 

■ apiserver の設定変更

kubeadm 実行後に作成された

/etc/kubernetes/manifests/kube-apiserver.yaml

を編集します。
これを行わない場合、他のホストが kubernetes クラスタに参加できないので注意が必要です。

[root@k8s-master1 ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml

- --admission-control=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota  

から

Initializers

NodeRestriction

を削除

- --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,ResourceQuota  
sed でやるならこれ。

sed -i -e "s/Initializers,//g" /etc/kubernetes/manifests/kube-apiserver.yaml
sed -i -e "s/NodeRestrictionNodeRestriction,//g" /etc/kubernetes/manifests/kube-apiserver.yaml

 
 

■ 設定変更を反映させる

[root@k8s-master1 ~]# systemctl restart docker kubelet

 

■ kubectl を kubelet に利用可能にする

[root@k8s-master1 ~]# mkdir -p $HOME/.kube
[root@k8s-master1 ~]# cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master1 ~]# chown $(id -u):$(id -g) $HOME/.kube/config

 
上記実行しない場合は次のようになる。

[root@k8s-master1 ~]# kubectl get pod --all-namespaces
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
[root@k8s-master1 ~]#

 
 

■ kubectl で状況確認

[root@k8s-master1 ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master1 Ready master 24m v1.8.5 CentOS Linux 7 (Core) 3.10.0-693.5.2.el7.x86_64 docker://1.12.6
[root@k8s-master1 ~]#
[root@k8s-master1 ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-apiserver-k8s-master1 1/1 Running 1 4m
kube-system kube-controller-manager-k8s-master1 1/1 Running 2 7m
kube-system kube-dns-545bc4bfd4-wh5fv 0/3 Pending 0 7m ★
kube-system kube-proxy-vkp9k 1/1 Running 1 7m
kube-system kube-scheduler-k8s-master1 1/1 Running 2 6m
[root@k8s-master1 ~]#

 
 
★ kube-dns の SATATUS が Pending になっているのは flannel などの network addon が存在しないため。
  network addon を入れないと Running にならないので注意が必要。

■ network addon を入れる

本当は calico がよかったけど、諸事情より kube-router をインストール。
今では満足しております。

[root@k8s-master1 ~]# kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml
configmap "kube-router-cfg" created
daemonset "kube-router" created
serviceaccount "kube-router" created
clusterrole "kube-router" created
clusterrolebinding "kube-router" created
[root@k8s-master1 ~]#

 
 

■ 状態確認

 network addon インストール後、1~2分で kube-dns が Running に変化。
 kubectl get pod --all-namespaces を何度が実行し、状態の遷移を表示されています。

kube-router インストール直後は、kube-dns はまだ「Pending」ステータスのまま。

[root@k8s-master1 ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-apiserver-k8s-master1 1/1 Running 1 9m
kube-system kube-controller-manager-k8s-master1 1/1 Running 2 12m
kube-system kube-dns-545bc4bfd4-wh5fv 0/3 Pending 0 12m ★
kube-system kube-proxy-vkp9k 1/1 Running 1 12m
kube-system kube-router-2dnrx 1/1 Running 0 1m
kube-system kube-scheduler-k8s-master1 1/1 Running 2 11m

ちょっと時間がたった後。
kube-dns が「Running」ステータスに。でも [READY] 欄がまだ「2/3」となっているため起動中。

[root@k8s-master1 ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-apiserver-k8s-master1 1/1 Running 1 9m
kube-system kube-controller-manager-k8s-master1 1/1 Running 2 12m
kube-system kube-dns-545bc4bfd4-wh5fv 2/3 Running 0 12m ★
kube-system kube-proxy-vkp9k 1/1 Running 1 12m
kube-system kube-router-2dnrx 1/1 Running 0 1m
kube-system kube-scheduler-k8s-master1 1/1 Running 2 11m

 
 

kube-dns 起動完了。

[root@k8s-master1 ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-apiserver-k8s-master1 1/1 Running 1 9m
kube-system kube-controller-manager-k8s-master1 1/1 Running 2 12m
kube-system kube-dns-545bc4bfd4-wh5fv 3/3 Running 0 12m ★
kube-system kube-proxy-vkp9k 1/1 Running 1 12m
kube-system kube-router-2dnrx 1/1 Running 0 1m
kube-system kube-scheduler-k8s-master1 1/1 Running 2 12m
[root@k8s-master1 ~]#

 
 

kube-dns 起動後は、ルーティングテーブルに kube-dns が存在するネットワークが載ってくる。

[root@k8s-master1 ~]# ip route
default via 192.168.1.1 dev enp0s20u1 proto static metric 100
10.244.0.0/24 dev kube-bridge proto kernel scope link src 10.244.0.1 ★
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/24 dev enp0s20u1 proto kernel scope link src 192.168.1.21 metric 100
192.168.12.0/24 dev enp3s0 proto kernel scope link src 192.168.12.21 metric 100
[root@k8s-master1 ~]#

 
 

kube-dns の IP アドレス確認方法は以下の通り。

[root@k8s-master1 ~]# kubectl get pod --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
kube-system kube-apiserver-k8s-master1 1/1 Running 1 14m 192.168.12.21 k8s-master1
kube-system kube-controller-manager-k8s-master1 1/1 Running 2 16m 192.168.12.21 k8s-master1
kube-system kube-dns-545bc4bfd4-wh5fv 3/3 Running 0 17m 10.244.0.15 k8s-master1
kube-system kube-proxy-vkp9k 1/1 Running 1 17m 192.168.12.21 k8s-master1
kube-system kube-router-2dnrx 1/1 Running 0 6m 192.168.12.21 k8s-master1
kube-system kube-scheduler-k8s-master1 1/1 Running 2 16m 192.168.12.21 k8s-master1
[root@k8s-master1 ~]#

 
 

kubernetes クラスタを参加していないホストのルーティングテーブル。参考。

[root@k8s-master3 ~]# ip route
default via 192.168.1.1 dev enp1s0 proto static metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/24 dev enp1s0 proto kernel scope link src 192.168.1.23 metric 100
192.168.12.0/24 dev enp2s0 proto kernel scope link src 192.168.12.23 metric 100
[root@k8s-master3 ~]#

 
 

k8s-master2、k8s-master3 をクラスタに参加

k8s-master1 の /etc/kubernetes ディレクトリを k8s-master2 と k8s-master3 にコピーします。

[root@k8s-master1 ~]# scp -r /etc/kubernetes/ k8s-master2:/etc/
The authenticity of host 'k8s-master2 (192.168.1.22)' can't be established.
ECDSA key fingerprint is SHA256:j26KcwZPPNOBIOXn18YhyVMEb/s+L2KAxEmREYRff4c.
ECDSA key fingerprint is MD5:f4:cb:6c:15:6c:f5:ca:86:18:47:d3:6b:f8:c4:5e:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'k8s-master2' (ECDSA) to the list of known hosts.
root@k8s-master2's password:
ca.key 100% 1679 687.0KB/s 00:00
ca.crt 100% 1025 531.0KB/s 00:00
apiserver.key 100% 1675 814.6KB/s 00:00
apiserver.crt 100% 1314 673.2KB/s 00:00
apiserver-kubelet-client.key 100% 1679 818.6KB/s 00:00
apiserver-kubelet-client.crt 100% 1099 358.6KB/s 00:00
sa.key 100% 1679 752.1KB/s 00:00
sa.pub 100% 451 164.4KB/s 00:00
front-proxy-ca.key 100% 1675 582.3KB/s 00:00
front-proxy-ca.crt 100% 1025 369.8KB/s 00:00
front-proxy-client.key 100% 1679 610.3KB/s 00:00
front-proxy-client.crt 100% 1050 399.6KB/s 00:00
kube-apiserver.yaml 100% 2594 1.1MB/s 00:00
kube-controller-manager.yaml 100% 2232 945.3KB/s 00:00
kube-scheduler.yaml 100% 991 548.4KB/s 00:00
admin.conf 100% 5452 2.2MB/s 00:00
kubelet.conf 100% 5492 1.2MB/s 00:00
controller-manager.conf 100% 5484 2.1MB/s 00:00
scheduler.conf 100% 5436 2.2MB/s 00:00
[root@k8s-master1 ~]#

 

[root@k8s-master1 ~]# scp -r /etc/kubernetes/ k8s-master3:/etc/
The authenticity of host 'k8s-master3 (192.168.1.23)' can't be established.
ECDSA key fingerprint is SHA256:oTg4IkB97t8rJzx/KmO8pxQ/5+mb/G98gy7y/SfYono.
ECDSA key fingerprint is MD5:03:91:6b:02:a8:01:50:d4:b5:91:68:1a:aa:ca:95:7b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'k8s-master3' (ECDSA) to the list of known hosts.
root@k8s-master3's password:
ca.key 100% 1679 1.1MB/s 00:00
ca.crt 100% 1025 620.3KB/s 00:00
apiserver.key 100% 1675 989.0KB/s 00:00
apiserver.crt 100% 1314 1.0MB/s 00:00
apiserver-kubelet-client.key 100% 1679 1.2MB/s 00:00
apiserver-kubelet-client.crt 100% 1099 908.1KB/s 00:00
sa.key 100% 1679 1.3MB/s 00:00
sa.pub 100% 451 375.4KB/s 00:00
front-proxy-ca.key 100% 1675 1.2MB/s 00:00
front-proxy-ca.crt 100% 1025 1.0MB/s 00:00
front-proxy-client.key 100% 1679 1.5MB/s 00:00
front-proxy-client.crt 100% 1050 556.3KB/s 00:00
kube-apiserver.yaml 100% 2594 2.1MB/s 00:00
kube-controller-manager.yaml 100% 2232 1.6MB/s 00:00
kube-scheduler.yaml 100% 991 912.2KB/s 00:00
admin.conf 100% 5452 3.1MB/s 00:00
kubelet.conf 100% 5492 2.9MB/s 00:00
controller-manager.conf 100% 5484 3.9MB/s 00:00
scheduler.conf 100% 5436 4.0MB/s 00:00
[root@k8s-master1 ~]#

 
 

k8s-master1 の /etc/cni/net.d/10-kuberouter.conf を k8s-master2 と k8s-master3 にコピーします。
これがないと kube-router が動作しません。

[root@k8s-master1 ~]# scp /etc/cni/net.d/10-kuberouter.conf k8s-master2:/etc/cni/net.d/10-kuberouter.conf
[root@k8s-master1 ~]# scp /etc/cni/net.d/10-kuberouter.conf k8s-master3:/etc/cni/net.d/10-kuberouter.conf

 
 

それぞれの kubelet を再起動します。

[root@k8s-master2 ~]# systemctl daemon-reload && systemctl restart kubelet
[root@k8s-master3 ~]# systemctl daemon-reload && systemctl restart kubelet

 
 

★ join できないのであれば、以下を実施。

[root@k8s-master1 ~]# kubectl certificate approve $(kubectl get csr | awk '/^csr/{print $1}')

 
 
kubectl を kubelet に利用可能にします。

[root@k8s-master2 ~]# mkdir -p $HOME/.kube
[root@k8s-master2 ~]# cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master2 ~]# chown $(id -u):$(id -g) $HOME/.kube/config

[root@k8s-master3 ~]# mkdir -p $HOME/.kube
[root@k8s-master3 ~]# cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master3 ~]# chown $(id -u):$(id -g) $HOME/.kube/config

 
 

ステータス確認

kubectl get node で確認することができます。

[root@k8s-master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master1 Ready master 1h v1.8.5
k8s-master2 Ready 23s v1.8.5
k8s-master3 Ready 18s v1.8.5
[root@k8s-master1 ~]#

 
 

より詳細に確認するには以下のコマンドを実行します。
どの pod がどのホスト上に存在するか確認することができます。

[root@k8s-master1 ~]# kubectl get pod --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
kube-system kube-apiserver-k8s-master1 1/1 Running 2 1h 192.168.12.21 k8s-master1
kube-system kube-apiserver-k8s-master2 1/1 Running 0 1m 192.168.12.22 k8s-master2
kube-system kube-apiserver-k8s-master3 1/1 Running 0 2m 192.168.12.23 k8s-master3
kube-system kube-controller-manager-k8s-master1 1/1 Running 3 1h 192.168.12.21 k8s-master1
kube-system kube-controller-manager-k8s-master2 1/1 Running 0 2m 192.168.12.22 k8s-master2
kube-system kube-controller-manager-k8s-master3 1/1 Running 0 2m 192.168.12.23 k8s-master3
kube-system kube-dns-545bc4bfd4-wh5fv 3/3 Running 3 1h 10.244.0.16 k8s-master1
kube-system kube-proxy-9phmb 1/1 Running 0 2m 192.168.12.22 k8s-master2
kube-system kube-proxy-vkp9k 1/1 Running 2 1h 192.168.12.21 k8s-master1
kube-system kube-proxy-wq4jd 1/1 Running 0 2m 192.168.12.23 k8s-master3
kube-system kube-router-2dnrx 1/1 Running 1 54m 192.168.12.21 k8s-master1
kube-system kube-router-5hk4v 1/1 Running 0 2m 192.168.12.23 k8s-master3
kube-system kube-router-js27b 1/1 Running 0 2m 192.168.12.22 k8s-master2
kube-system kube-scheduler-k8s-master1 1/1 Running 3 1h 192.168.12.21 k8s-master1
kube-system kube-scheduler-k8s-master2 1/1 Running 0 2m 192.168.12.22 k8s-master2
kube-system kube-scheduler-k8s-master3 1/1 Running 0 2m 192.168.12.23 k8s-master3
[root@k8s-master1 ~]#

 
 

各ホストの kube-dns のネットワーク情報がルーティングテーブルに反映されます。

[root@k8s-master1 ~]# ip route
default via 192.168.1.1 dev enp0s20u1 proto static metric 100
10.244.0.0/24 dev kube-bridge proto kernel scope link src 10.244.0.1
10.244.1.0/24 via 192.168.12.22 dev enp0s20u1 proto 17
10.244.2.0/24 via 192.168.12.23 dev enp0s20u1 proto 17
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/24 dev enp0s20u1 proto kernel scope link src 192.168.1.21 metric 100
192.168.12.0/24 dev enp3s0 proto kernel scope link src 192.168.12.21 metric 100
[root@k8s-master1 ~]#

 
 

いったんここで終了です。

 
 

問題が起こった時は

kubeadm でのセットアップを最初からやり直したい。

kubeadm を初期化する。 各ホストで以下の手順を実行します。

kubeadm reset

 
 

etcd を初期化する 一台で以下を実施します。
まずは、各ホストの ID を確認

[root@k8s-master1 ~]# etcdctl member list
c731eceee484bc9f: name=master3 peerURLs=http://k8s-master3:2380 clientURLs=http://0.0.0.0:2379 isLeader=false
eaa4fa1f5f0617ef: name=master1 peerURLs=http://k8s-master1:2380 clientURLs=http://0.0.0.0:2379 isLeader=true
ecdc6db6898f5bc0: name=master2 peerURLs=http://k8s-master2:2380 clientURLs=http://0.0.0.0:2379 isLeader=false
[root@k8s-master1 ~]#

 
 

自ホスト以外の ID を指定して削除。

etcdctl member remove ecdc6db6898f5bc0
etcdctl member remove c731eceee484bc9f

 
 

各ホストで以下の手順を実行します。

systemctl stop etcd
rm -rf /var/lib/etcd/default.etcd/*

 
 

/var/lib/etcd/default.etcd を削除してしまったうっかりさんは以下を実行してディレクトリを再作成してください。
こんなこともあろうかと手順を用意しておいたのじゃ。実体験だからな!(´;ω;`)

mkdir /var/lib/etcd/default.etcd
chwon etcd: /var/lib/etcd/default.etcd

 
 

各ホストで同時に実行します。

systemctl start etcd

 
 

念のため確認。
docker ps -a を実行し、余計なコンテナが残っていないかを確認します。残ってたら消します。
※ だいたい kube-なんとかという名前で残ってます。

 
 

再セットアップ後、kubernetes クラスタにホストが参加できない。

k8s-master1 で以下のコマンドを実施します。

kubectl certificate approve $(kubectl get csr | awk '/^csr/{print $1}')

 
 

Google Chrome プラグインを読み込むことができませんでした の対処

とても久しぶりの更新になります。
新年早々、動画が見れなくなる不具合に見舞われました。
その際に行ったトラブル解決方法を記載します。
このケースで同様の事例が発生している方が
結構いらっしゃるのではないでしょうか。


※ お試しになられる場合は自己責任でお願いします。念のため。

構成

  OS : Windows 8.1
  Chrome : 47.0.2526.106 m

こうやったら発生しました

  Google Chrome を 32bit 版から 64bit 版にアップグレードしました。
  その後、動画サイトにアクセスしたところ、動画が閲覧できず、
  プラグインを読み込むことができませんでした」
  の表示が表示されました。

成功した対処法

  C:\Users\\AppData\Local\Google\Chrome\User Data\PepperFlash\
  配下にあるフォルダ
  「20.0.0.267」
  を
  「20.0.0.267-」
  にリネーム(名前変更)しました。
  (末尾にハイフンを付け足すだけです。)


  ※「20.0.0.267」は Flash Player のバージョンで、使用している Google Chrome のバージョンによって変化するものと思われます。 


  変更後、ニコニコ動画など Flash を使用するサイトを閲覧したところ、
  動画を再生することができました。


  暫くしてから再度上記のフォルダを確認すると、
  「20.0.0.267」フォルダが復活していました。

推測される原因

  上記のパスは存在しますが Flash Player プラグインを読み込めない状態だったようですね。
  Flash Player プラグインが 32bit 版のままだったため、64bit 版の Chromeプラグインを扱えなかったとか?


試したこと

  参考に、解決までに試したことを列挙します。

 
  1. chrome://flags/#enable-npapi にて NPAPI を有効にする
  → 2015年9月でサポートが終了し、有効にすること自体ができなくなっている模様。
    確認したところパラメータがなくなっていました。
    参考:https://support.google.com/chrome/answer/6213033?hl=ja
 
 
  2. Chrome 再インストール
  → 変化なし。
 
 
  3. Flash の再インストール
  → Chrome 64bit にした状態で Adobe Flash Player のサイトにアクセスし、
    Flash Player を再インストール実施。変化なし。
 
 
  4. OS 再起動
  → 変化なし。


2016年も楽しい動画ライフを!
以上、コンゴトモ ヨロシク…

飛ばせ!Vyattaで無線LAN。

前回の自宅ルータをVyattaにからの続きです。

今回はVyattaに無線LAN機能を付けてみます。

この設定では、eth0 のセグメント(192.168.1.0/24)で無線LANを使用できるようにしているのではなく、無線LAN用のセグメントを新たに作成しています(192.168.20.0/24)。

eth0 と同じセグメントで無線LANを使用したい場合は、ブリッジインターフェースを作成し

eth0 と wlan0 を所属させれば可能だと思います。(未検証)

ブリッジインターフェースについては、以下のサイト様に詳しい説明があります。

http://www.sawanoboly.net/wp/2011/04/13/263.html



○ ハードウェア構成

今回使用するハードウェアはこちら。

ロジテック LAN-W300N/U2S


こちらをHP MicroServer のUSBポートに挿します。
接続後は再起動してください。

認識したかどうかは、dmesg コマンドで確認できます。

[ 2.659730] usb 1-2: New USB device found, idVendor=0789, idProduct=0169
[ 2.659736] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2.659741] usb 1-2: Product: 802.11 n WLAN
[ 2.659743] usb 1-2: Manufacturer: Ralink
[ 2.659746] usb 1-2: SerialNumber: 1.0

・・・
・・

[ 4.982560] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'


ieee80211 phy0 〜の phy0 を押さえておきます。





○ 設定

認識が確認できたところで、WLAN 用の設定を投入していきます。
今回の設定は、
ssid = testwlan
・password = password1
・セキュリティ = wpa2
・network = 192.168.20.0/24
・無線規格 = IEEE802.11g
・channel = 4
・無線type = アクセスポイント




無線LANの設定

set interfaces wireless wlan0 ssid 'testwlan'
set interfaces wireless wlan0 security wpa passphrase 'password1'
set interfaces wireless wlan0 address '192.168.20.1/24'
set interfaces wireless wlan0 channel '4'
set interfaces wireless wlan0 mode 'g' // IEEE80.2g
set interfaces wireless wlan0 physical-device 'phy0' // dmesg で確認したもの
set interfaces wireless wlan0 security wpa mode 'wpa2'
set interfaces wireless wlan0 type 'access-point'

NATの設定

set nat source rule 20 outbound-interface 'pppoe0'
set nat source rule 20 source address '192.168.20.0/24'
set nat source rule 20 translation address 'masquerade'

DHCPの設定

set service dhcp-server shared-network-name wireless subnet 192.168.20.0/24 default-router '192.168.20.1'
set service dhcp-server shared-network-name wireless subnet 192.168.20.0/24 dns-server '192.168.20.1'
set service dhcp-server shared-network-name wireless subnet 192.168.20.0/24 ntp-server '192.168.20.1'
set service dhcp-server shared-network-name wireless subnet 192.168.20.0/24 start 192.168.20.10 stop '192.168.20.15'

DNSの設定

set service dns forwarding listen-on 'wlan0'

以上で設定は終了です。

NATの設定とDNSの設定がないと通信ができませんのでお忘れなく。

自宅ルーターをvyattaに。 VC6.5R1 編

Vyatta Core 6.5R1

構成は前回の記事参照お願いします。

Vyatta Core 6.5R1 がリリースされたので、思い切って最初からインストールし直してみました。

1. 起動

 DVD-Drive に CD 入れて、CD から起動させます。
 起動してきたら、

  user:vyatta
  pass:vyatta

 でログイン。
 
 ログインしたら、

  # install system

 にて、HDD にインストール実行。
 とりあえずEnter、yesでなんとか。
 
 インストール完了したら、

  # reboot

 にて再起動。
 その際、BIOS画面になったらCDを取り出します。
 
 再度Vyattaが起動してきたら、上記アカウントでログイン。

2. 設定

 Network 構成は以下の通り。
 
 
 
 

基本設定

  ホスト名、TimeZone、vyatta ユーザのパスワードを変更します。

  • ホスト名の設定

$ configure
  # set system host-name Router1

 

  • TimeZone の設定

 # set system time-zone 'Asia/Tokyo'

  

  • ユーザ vyatta のパスワード変更

  # set system login user vyatta authentication encrypted-password *******

  

ここまでで設定を反映、保存させます。

  # commit
  # save

Network 設定

  Internet側のNICをEth0、LAN側のNICをEth1として使用しています。

  今後の作業はTeraTermからSSHでやっていくつもりなので、先に、
  ・Eth1(LAN側)のIPアドレス -> 192.168.1.2/24
  ・ssh
  を設定します。
  
  第4オクテットが 2 なのは、後々、VRRP の設定を想定していて
  バーチャルIPアドレスで 1 を使おうと考えているからです。
  

  • Eth1のアドレス設定

  # set interface ethernet eth1 address 192.168.1.2/24

  # set service ssh
# commit
# save

  あっという間に設定が完了しました。
  設定を確認します。

  # exit
  $ show inerface
  Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
  Interface    IP Address           S/L    Description
  −−−−    −−−−−           −−    −−−−−−−−
  eth0       −                 u/u
  eth1       192.168.1.2/24          u/u
  lo        127.0.0.1/8           u/u
           ::1/128
  $

自宅ルーターをvyattaに。

自宅ルーターをvyattaに

HP MicroServer + Vyatta 6.4 で自宅ルータ

仮想マシンにVyattaをインストールして自宅ルータにしている方がいらっしゃいますが、
こちらはHP MicroServer にVyattaをインストールし、自宅ルーターにしてみました。


ハードウェアの構成

構成の詳細は以下の通りです。
本体のメモリやCPUは購入当初から変更していません。
オプションとして拡張しているものだけをピックアップしています。


* HP MicroServer
  PCIe1:PWLA8391GT (Gigabit Ethernet Adapter)
  PCIe2:iLO
  HDD1:SSD 120GB
  HDD2-4:なし


PCIe2のiLOは、リモートから HP MicroServer を管理できるオプション製品です。
何かのキャンペーンの時に購入した時に一緒に付いてきました。
これがなくても特に問題ありません。


Vyatta インストール

Vyatta のバージョンは 6.4 を使用しています。

Vyatta 自体は SSD にインストールしています。
USB Flash memory にインストールしようと思いましたが、
何故かうまくいかず、しょうがなく SSD に。

インストールの手順自体はここでは割愛します。


設定

以下の構成での設定をしています。
要件としては、インターネットにつながるということだけです。

間に入っているスイッチはただのスイッチングハブです。
今回はWebの閲覧ができる様になることが目的です。

投入した設定は以下の通り。
※ 設定は全て1行で入力します。横幅の都合で折り返されています。

設定モードに移行

configure

eth0(PPPoE側/Internet側)の設定

set interfaces ethernet eth0 duplex 'auto'
set interfaces ethernet eth0 pppoe 0 default-route 'auto'
set interfaces ethernet eth0 pppoe 0 mtu '1492'
set interfaces ethernet eth0 pppoe 0 name-server 'auto'
set interfaces ethernet eth0 pppoe 0 password '*****'
set interfaces ethernet eth0 pppoe 0 user-id '******@hogehoge.com'
set interfaces ethernet eth0 smp_affinity 'auto'
set interfaces ethernet eth0 speed 'auto'

eth1(LAN側)の設定

set interfaces ethernet eth1 address '192.168.100.1/24'
set interfaces ethernet eth1 duplex 'auto'
set interfaces ethernet eth1 smp_affinity 'auto'
set interfaces ethernet eth1 speed 'auto'

NAT(IPマスカレード)の設定

set nat source rule 1 outbound-interface 'pppoe0'
set nat source rule 1 source address '192.168.100.0/24'
set nat source rule 1 translation address 'masquerade'

DHCPの設定

set service dhcp-server shared-network-name kanri_pool subnet 192.168.100.0/24 default-router '192.168.100.1'
set service dhcp-server shared-network-name kanri_pool subnet 192.168.100.0/24 dns-server '192.168.100.1'
set service dhcp-server shared-network-name kanri_pool subnet 192.168.100.0/24 start 192.168.100.50 stop '192.168.100.70'

DNS の設定

set service dns forwarding listen-on 'eth1'

ホスト名/パスワード

set system host-name 'vyatta-router'
set system login user vyatta authentication encrypted-password '*********'

確認

show interface

まとめ

以上で、とりあえず設定は完了しました。


使用感としては、Webの閲覧、SkypeYoutube の視聴など、ストレスなく使うことができます。


といってもリアルタイムにこれを設定しているわけではなく、現用の Vyatta にはもっといろいろ
設定が入った上での感想です。


また、上記の設定は現用機器の show configuration commands で表示させた設定を基に
記憶を頼りに記載してるだけなので何か抜けてるかもしれないでござるの巻。


次回は、無線 LAN の増設に挑戦します。

Vyatta と ipad2 で VPN 接続

ipad2からソフトウェアルータ「Vyatta」にVPN接続をテストしてみました。


[Vyattaについて]
GIGAZINEさんより
http://gigazine.net/news/20080426_vyatta/

[目的]
 ・「PPTP」を使ったリモートアクセスVPNで接続してみる


[利点]
 ・外出時、外から自宅のLANにアクセスできる
 ・その他、使いようによっていろいろ


[接続図]
 ・接続図は、以下のようになってます。


 ・Vyattaはルータとして使うのではなく、VPNアクセス用として使っています


[VPN構築前のVyattaの設定状況]
 ・eth0を持っており、IPアドレスは192.168.1.200/24
 ・デフォルトゲートウェイはルータのIPアドレス
 ・その他はデフォルトのまま


[VPN設定]

VyattaのIPアドレスを指定(VPNアクセスを受けるインターフェースのIPアドレスを指定)

 vyatta@Vyatta# set vpn pptp remote-access outside-address 192.168.1.200

VPNアクセス後、ipad2が受け取るIPアドレスの範囲
今回は192.168.1.201 〜 205までを割り振る例

 vyatta@Vyatta# set vpn pptp remote-access client-ip-pool start 192.168.1.201
 vyatta@Vyatta# set vpn pptp remote-access client-ip-pool stop 192.168.1.205

ipad2が参照するDNSサーバのIPアドレスを指定

 vyatta@Vyatta# set vpn pptp remote-access dns-servers server-1 192.168.1.1

Vyatta自身にユーザ認証の情報を登録します。
ここでは、「vpn-user」というユーザで登録しています。

 vyatta@Vyatta# set vpn pptp remote-access authentication mode local
 vyatta@Vyatta# set vpn pptp remote-access authentication local-users username vpn-user password ********


以上でVyattaの設定は終了です。

 vyatta@Vyatta# verify
 vyatta@Vyatta# commit

で設定の確認・反映させます。

show vpn で設定を見たときは以下のようになりました。

 vyatta@Vyatta# show vpn
  pptp {
      remote-access {
          authentication {
              local-users {
                  username vpn-user {
                      password ************
                  }
              }
              mode local
          }
          client-ip-pool {
              start 192.168.1.201
              stop 192.168.1.205
          }
          dns-servers {
              server-1 192.168.1.1
          }
          outside-address 192.168.1.200
      }
  }


Vyattaの設定は完了しましたが、このままではまだVPN接続はできません。
ルータのポートを開放する必要があるからです。
以下のポートを開放します。
PPTP(1723番ポート)
GRE(47番ポート)

以上で設定は完了です。
これでipad2からVyattaへVPN接続できるようになります。

Fedora 14 でbonding設定

Fedora14でボンディング設定

bonding(ボンディング)
複数のNICをひとつのNICとして束ねる技術です。
耐障害性や負荷分散をさせることができます。

Linuxでは複数の動作モードが用意されていて、用途にあったものを選択することができます。

bondingの種類については以下を参照のこと。
http://www.jp.redhat.com/magazine/jp/200904/rhel.html

一般的には、
mode=1(Active-Backup:複数のNICの内1つだけが通信をし、そのNICがダウンした時は他のNICに切り替え、通信を続行できるようにする動作モード)
が使われているらしいので、これを例に設定します。

まずはルートに昇格

$ su -
#

初めに、bondingを有効にします。

# nano /etc/modprobe.d/dist.conf

ファイルの末尾に、

alias bond0 bonding
options bond0 mode=1 miimon=100

これでbondingの準備ができました。
miimonはbond0の監視を行う設定です。


次はインターフェース定義ファイルがあるディレクトリに移動。

# cd /etc/sysconfig/network-scripts/

NICの定義ファイルをコピーし、bonding用に設定する。

# cp ifcfg-eth0 ifcfg-bond0
# nano ifcfg-bond0

以下のように書き換えます。

DEVICE=bond0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet

bond0の設定はこれでおkです。

今度はifcfg-eth0、ifcfg-eth1の設定。

# nano ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
MASTER=bond0
SLAVE=yes

DEVICE=eth0
NICを指定します。
eth0の設定ならeth0、eth1ならeth1の設定。
ifcfg-***の***と合わせる。じゃないと分かりづらいです。

BOOTPRO=none
起動時にDHCPからIPアドレスを固定もしくは割り当てない時にする設定です。

ONBOOT=yes
Fedora14が起動したときにNICを有効にするかどうかの設定です。
yesなので起動時に有効化します。

MASTER=bond0
ボンディング用の設定です。
束ねられた(ボンディングされた)NICの名前を記述します。

SLAVE=yes
ボンディング用の設定です。
束ねられたNICのグループに入るかどうかの設定です。
yesはボンディングに参加します。


ifcfg-eth1も同様の設定で。


ここで一度再起動。

# reboot

諸事情で再起動できない〜と言う場合は、

# rmmod bonding
# modprobe bonding
# /etc/init.d/network restart

で大丈夫らしい。らしい。

※注意
再起動したときに、bond0、eth0にIPアドレスが割り振られている場合(ifconigで確認)、もしくは、
# /etc/init.d/network restart
を実行したときにNICの再起動が失敗する場合(RTNETLINK answers: File exists が出現するなど)、

# service NetworkManager stop

でNetworkManagerを停止させるとうまくいく場合あり。
NetworkManager止めてもネットワーク使えなくなるとかそんなことはなかったぜ!!

恒久的に止める場合

# chkconfig NetworkManager off

確認

# chkconfig NetworkManager --list
NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off

これで次回以降再起動してもNetworkManagerは起動してきません。

その他、起こった現象としては、

・ルーティングテーブルの異常

# netstat -rn

で、ルーティングテーブルを確認するとデフォルトゲートウェイのifaceがbond0ではなくeth0

・ネットに接続できない
ブラウザなどでwebページを閲覧しようとしても閲覧できない繋がらない。


IPアドレスの確認

# ifconfig
bond0 Link encap:Ethernet HWaddr 08:00:27:14:C7:7A
inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe14:c77a/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:3474 errors:0 dropped:0 overruns:0 frame:0
TX packets:1464 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:356502 (348.1 KiB) TX bytes:208594 (203.7 KiB)

eth0 Link encap:Ethernet HWaddr 08:00:27:14:C7:7A
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1436 errors:0 dropped:0 overruns:0 frame:0
TX packets:1187 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:149741 (146.2 KiB) TX bytes:168411 (164.4 KiB)
Interrupt:11 Base address:0xd020

eth1 Link encap:Ethernet HWaddr 08:00:27:14:C7:7A
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:2064 errors:0 dropped:0 overruns:0 frame:0
TX packets:290 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:208477 (203.5 KiB) TX bytes:42305 (41.3 KiB)
Interrupt:10 Base address:0xd060

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1341 errors:0 dropped:0 overruns:0 frame:0
TX packets:1341 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2856114 (2.7 MiB) TX bytes:2856114 (2.7 MiB)

bond0にのみIPアドレスが割り振られていれば設定完了です。

確認作業として、eth0のLANケーブルを抜線します。
通信が正常に続けられれば成功。(何度かtimeoutになってもちょっとしたら復活します。)