LoginSignup
32
35

More than 5 years have passed since last update.

RancherでKubernetesでHelmでDockerでJenkinsを動かす方法

Posted at

RancherでKubernetesでHelmでDockerでJenkinsを動かす方法

Rancherを使ってKubernetesクラスタを構築し、HelmでJenkinsをインストールする手順を紹介します。
Dockerをオーケストレーションツールで管理し、既存のアプリケーション(JenkinsとかWordPressとか)を実行したい、というとき、それぞれをインストールしていこうとすると、ドキュメントが散在していて困ることがあります。
今回はRancher→Kubernetes→Helm→Jenkinsまで構築する一連の手順をまとめます。

全体像はこうなります。

0.png

サーバ

サーバは3台使います。
2台がKubernetesクラスタとなり、1台はNFSサーバになります。

サーバ 役割 IPアドレス RancherOS Kubectl Helm
マスター Kubernetes Master 10.249.20.100
ワーカー Kubernetes Minion 10.249.20.102 x x x
NFS NFSサーバ 10.249.20.11 x x x

OSはCentOS7.4を使います。

Rancher, Kubernetes, Helm, Docker, Jenkins

Rancher, Kubernetes, Helm, Docker, Jenkinsについては以下をご参考ください。

事前作業

事前作業として、まずはOSの設定や更新、Dockerのインストールを行います。
これは全サーバで実行します。
なお、この辺の設定はOSの初期状態次第です。
目的はOSの更新、Dockerのインストール、selinuxやiptables, firewalldの無効化、ホスト名の設定、サーバ間接続の確認です。
特にselinux、iptables, firewalldの無効化はセキュリティ設定ですので、自分の環境、方針に合わせて設定してください。

## all servers
# update Linux and install docker
sudo su -
yum -y update && yum -y upgrade
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install epel-release
yum -y install yum-utils git wget vim
yum -y install docker

# start docker
systemctl start docker && systemctl enable docker

# stop selinux and firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
getenforce
cat /etc/selinux/config
systemctl disable iptables-services firewalld
systemctl stop iptables-services firewalld

# set hostname
ipad=$(ip addr show eth0 | sed -nEe 's/^[ \t]*inet[ \t]*([0-9.]+)\/.*$/\1/p')
hostnamectl set-hostname $(cat /etc/hostname)
echo "HOSTNAME=$(cat /etc/hostname)" >> /etc/sysconfig/network
echo "${ipad}  $(hostname)"  >> /etc/hosts
echo "preserve_hostname: true" >> /etc/cloud/cloud.cfg
hostname && hostname -i && hostname -f

# set ntp
yum -y install chrony
systemctl start chronyd.service
chronyc sources
yum -y install ntp
systemctl start ntpd
systemctl enable ntpd

# set network
cat << EOF > /tmp/hosts
localhost
10.249.20.11
10.249.20.100
10.249.20.102
EOF
for i in $(cat /tmp/hosts); do ssh-keyscan -H $i >> ~/.ssh/known_hosts ; done

# delete yum pkg
yum -y clean all

NFSサーバとクライアントの設定

続いてNFSサーバを構築し、NFSクライアントを設定します。
NFSサーバは10.249.20.11のサーバのみ実行します。

## nfs server
yum -y install nfs-utils rpcbind
mkdir /opt/nfs
## change network address to your env
echo "/opt/nfs 10.249.20.0/16(rw,no_root_squash)" >> /etc/exports
echo "Domain = $(hostname -d)" >> /etc/idmapd.conf
systemctl start rpcbind nfs-server
systemctl enable rpcbind nfs-server

touch /opt/nfs/test
echo "test nfs" >> /opt/nfs/test

これでNFSサーバが起動します。
/opt/nfsをNFS共有ストレージにしています。
NFSクライアントからの接続テスト用に、/opt/nfs/testというファイルを作り、"test nfs"と書き込んであります。
続いてNFSクライアントです。

## nfs client
yum -y install nfs-utils
mkdir /opt/nfs
## change ip address to your env
echo "10.249.20.11:/opt/nfs   /opt/nfs        nfs defaults 0  0" >> /etc/fstab
mount /opt/nfs
nfsstat -m

cat /opt/nfs/test

NFSサーバ 10.249.20.11の/opt/nfsをマウントし、/opt/nfs/testの中身を見ています。
以下のように表示されればOKです。

1.PNG

Rancherの起動

Rancherを起動します。
RancherはRancherOSとして、Dockerコンテナ専用のOSが提供されています。
以下のコマンドでRancherOSをDocker runし、起動することができます。
このコマンドはKubernetesマスター(10.249.20.100)で実行します。

## rancher master
# start rancher
docker run -d --restart=unless-stopped -p 8080:8080 rancher/server

2.PNG

Rancherが起動すると http://10.249.20.100:8080 で公開されます。
ブラウザで http://10.249.20.100:8080 を開きます。
以下のような画面が表示されていればOKです。

3.PNG

Kubernetesクラスタの構築

Rancherを使ってKubernetesクラスタを構築します。
KubernetesクラスタはRancherで構築、管理されます。
そのため、Rancherの画面上だけでKubernetesクラスタを構築することができます。

左上メニューのDefaults配下のManage Environmentsを選択します。

4.PNG

Add Environmentします。

4.2.PNG

環境としてKubernetesを選択して作成します。

5.PNG

これでRancher上にKubernetesの環境は作れます。

6.PNG

続いてKubernetesクラスタにホストを追加します。
Kubernetesクラスタにはマスター(10.249.20.100)とミニオン(10.249.20.102)を参加させます。

Defaults配下のKubernetesを選択します。
7.PNG

ホスト追加待ち状態になっているので、Add Hostsします。
8.PNG

まずはホストの追加先アドレスを設定します。
基本的にここはデフォルトでOKです。
9.PNG

まずはKubernetesマスターを追加します。
IPアドレスにKubernetesマスターのIPアドレス(10.249.20.100)を書き込みます。
10.PNG

コマンドが生成されるので、このコマンドをコピーしてKubernetesマスターのコンソールで実行します。
11.PNG

ホストが追加されると、Rancher上ではこのように見えます。
12.PNG

同じ手順でKubernetesミニオンも追加します。
15.PNG

Kubernetesクラスタが起動すると、以下のようにKubernetesダッシュボードも起動します。
13.PNG

Kubectlのインストール

Kubernetesクラスタの設定が済んだら、kubectlをマスターにインストールします。
KubectlやhelmコマンドはRancherのCLIで操作することもできますが、どうも不安定なようなので、OSにも入れておきます。

16.PNG

公式なkubectlのインストール方法は以下をご参考ください。
https://kubernetes.io/docs/tasks/tools/install-kubectl/

# install kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv ./kubectl /usr/local/bin/kubectl

kubectlのconfigはRancherの画面上で確認することができます。

17.PNG

これをコピーし、~/.kube/configに書き込みます。

cat <<- EOF > ~/.kube/config
apiVersion: v1
kind: Config
clusters:
- cluster:
    api-version: v1
    insecure-skip-tls-verify: true
    server: "https://10.249.20.100:8080/r/projects/1a7/kubernetes:6443"
  name: "KubeEnv"
contexts:
- context:
    cluster: "KubeEnv"
    user: "KubeEnv"
  name: "KubeEnv"
current-context: "KubeEnv"
users:
- name: "KubeEnv"
  user:
    token: "QmFzaWMgTURWQlJURXdOemxHTlRaRVJUTkROa1pCTlRNNlYySmpUa2RaVnpaeGIxcHhhRTFoTlRoMFVYVjZkMVZTV1dwS1MwdHJOV3RVTkhVNWRuVkhZZz09"
EOF

kubectl cluster-info

最後にkubectlが使えるか、試してみます。
成功していたら以下のように表示されます。

18.PNG

Helmのインストール

Helm自体はRancherでKubernetesをインストールしたときに自動的に導入されています。
ここではKubernetesマスターにHelmコマンドをインストールし、Helmクライアントとして使えるようにします。

公式のHelmのインストール方法は以下をご参考ください。
https://docs.helm.sh/using_helm/#installing-helm

# install helm commands
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
helm init
helm init --upgrade
helm version

Helmクライアントをインストールし、マスターからHelmコマンドが使えるようになりました。
上記のhelm init upgradeでHelmサーバをアップデートしていますが、少し時間がかかることがあるので気長に待ちましょう。

20.PNG

Kubernetes PersistentVolumeの設定

KubernetesにPersistentVolumeを設定します。
PersistentVolumeはKubernetesで永続ストレージとなります。
Dockerコンテナで作ったファイルはDockerコンテナの外に保存しないかぎり、Dockerコンテナが削除されるとファイルも消えます。
Kubernetesの場合、複数サーバでDockerコンテナが起動するため、永続性のある共有ストレージにファイルやデータを保存します。
詳しくは以下をご参考ください。
https://kubernetes.io/docs/concepts/storage/persistent-volumes/
https://qiita.com/kaishuu0123/items/4c4336851d06ba906bab

PersistentVolumeをつくり、ためしにnginxを使ってNFSにデータが書き込めるか、試します。
以下はKubernetesマスターで実行します。

# setup persistent volume
cat <<- EOF > /opt/pv-nfs.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.249.20.11
    path: "/opt/nfs"
EOF
kubectl create -f /opt/pv-nfs.yml

cat <<- EOF > /opt/pvc-nfs.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
EOF
kubectl create -f /opt/pvc-nfs.yml

kubectl get pv,pvc

まずはPersistentVolumeとPersistentVolumeClaimを作り、NFSを設定しました。

# try run nginx with persistent volume
cat <<- EOF > /opt/rc-nfs.yml
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-nfs-test
spec:
  replicas: 1
  selector:
    app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
          - name: nginx
            containerPort: 80
        volumeMounts:
            - name: nfs
              mountPath: "/usr/share/nginx/html"
      volumes:
      - name: nfs
        persistentVolumeClaim:
          claimName: nfs
EOF
kubectl create -f /opt/rc-nfs.yml
kubectl get pods

echo "NFS Works" > /opt/nfs/index.html

23.PNG

Kubernetesクラスタにnginxをデプロイします。
VolumeMountsにNFSを設定し、/opt/nfs/index.htmlに"NFS Works"と書き込みました。

kubectl exec rc-nfs-test-sqkzn  cat /usr/share/nginx/html/index.html

cat /opt/nfs/index.html

/opt/nfs/index.htmlに書き込めていることを確認します。

24.PNG

33.PNG

OKであれば、不要なnginxは削除します。

kubectl delete pods,rc --all

HelmでJenkins起動

最後に、Helmを使ってJenkinsを起動します。
HelmでJenkinsをインストールするだけであれば、helm install stable/jenkinsで済むのですが、これだとPersistentVolume不在で正常起動できないことがあります。
HelmでPersistentVolumeを設定するため、以下のオプション付きで起動します。

なお、HelmのJenkins起動方法や使えるオプションは以下をご参考ください。
https://github.com/kubernetes/charts/tree/master/stable/jenkins

# helm install jenkins
helm install --name my-jenkins --set persistence.enabled=true,persistence.size=10Gi,Persistence.ExistingClaim=nfs stable/jenkins

これでJenkinsが起動すると、以下のNotesが表示されます。
25.PNG

Notesに従って、Jenkins adminユーザのパスコードを取得し、URLを入手します。
26.PNG

27.PNG

このURLをブラウザで開きます。
起動に時間がかかることもありますが、成功するログイン画面が表示されます。

31.PNG

adminユーザでさきほどのパスコードを入力し、ログインします。
32.PNG

成功です!

なお、Jenkinsの起動はKubernetesダッシュボードから確認することもできます。
30.PNG

以上です。良いRancherでKubernetesでHelmでDockerでJenkinsライフを!

32
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
35