Kubernetes上にJIRAを構築する方法（PVはNFSを利用）

# Kubernetes上にJIRAを構築する
PVとしてNFSを使う。
NFSの初期設定も記載。既にNFS serverを構築済みの人は飛ばしてください。
1台構成のKubernetesで且つ、master = nfs serverというシンプル構成。
作ったmanifestは[iguchikoma/jira-kubernetes](https://github.com/iguchikoma/jira-kubernetes)に上げておきました。

## NFS Serverのinstall
```bash:bash
### nfs serverのinstall
sudo apt install -y nfs-kernel-server
sudo su -
# 以下rootで実行
echo "/export/nfs 172.0.0.0/8(rw,async,no_root_squash,no_subtree_check) 127.0.0.1/32(rw,async,no_root_squash,no_subtree_check)" | tee -a /etc/exports
mkdir -p /export/nfs
chmod 777 /export/nfs
exportfs -ra
exit # root抜ける

### nfs clientのinstall
sudo apt install -y nfs-common

### nfsの動作確認
sudo mount -t nfs 127.0.0.1:/export/nfs /mnt
sudo umount mnt
```

## namespaceの作成
```bash:bash
### 以下のようなnamespaceのmanifestを用意
vagrant@vagrant:~/jira$ cat jira-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: jira

### K8sへdeployする
vagrant@vagrant:~/jira$ kubectl apply -f jira-ns.yaml
namespace/jira created

### 作成後の確認
vagrant@vagrant:~/jira$ kubectl get ns jira
NAME   STATUS   AGE
jira   Active   50s
```

## PVの作成
```bash:bash
# PV用のdirectoryをNFSで公開しているdirectory配下に作成
root@vagrant:/export/nfs# mkdir pv0001
root@vagrant:/export/nfs# chmod 777 pv0001

# PVのmanifestを作成
vagrant@vagrant:~/jira$ cat jira-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
  annotations:
    volume.beta.kubernetes.io/storage-class: "slow"
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 127.0.0.1
    path: /export/nfs/pv0001

### pvをdeploy
vagrant@vagrant:~/jira$ kubectl apply -f jira-pv.yaml
persistentvolume/pv0001 created

### 出来たPVの状態確認
vagrant@vagrant:~/jira$ kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv0001   5Gi        RWO            Recycle          Available           slow                    4s
```

## PVCの作成
```bash:bash
### PVCのmanifestを作成
vagrant@vagrant:~/jira$ cat jira-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jira-pv-claim
  namespace: jira
  labels:
    app: jira
  annotations:
    "volume.beta.kubernetes.io/storage-class": "slow"
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

### PVCをdeploy
vagrant@vagrant:~/jira$ kubectl apply -f jira-pvc.yaml
persistentvolumeclaim/jira-pv-claim created

### PVCの状態確認
vagrant@vagrant:~/jira$ kubectl get pvc -n jira
NAME            STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
jira-pv-claim   Bound    pv0001   5Gi        RWO            slow           6s

### PV側も念の為確認
vagrant@vagrant:~/jira$ kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS   REASON   AGE
pv0001   5Gi        RWO            Recycle          Bound    jira/jira-pv-claim   slow                    80s
vagrant@vagrant:~/jira$

```
## JIRAのdeploymentとserviceの作成
```bash:bash
### deploymentとserviceのmanifestを以下のように作成
vagrant@vagrant:~/jira$ cat jira-deployment-svc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jira
  namespace: jira
  labels:
    app: jira
spec:
  selector:
    matchLabels:
      app: jira
      tier: jira
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: jira
        tier: jira
    spec:
      containers:
      - image: atlassian/jira-software
        name: jira
        ports:
        - containerPort: 8080
          name: jira
        volumeMounts:
        - name: jira-persistent-storage
          mountPath: /var/atlassian/application-data/jira
      volumes:
      - name: jira-persistent-storage
        persistentVolumeClaim:
          claimName: jira-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: jira
  namespace: jira
  labels:
    app: jira
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30000
  selector:
    app: jira
    tier: jira

### kubernetes上にdeploymentとserviceをdeployする。
vagrant@vagrant:~/jira$ kubectl apply -f jira-deployment-svc.yaml
deployment.apps/jira created
service/jira created

### podの状態確認
vagrant@vagrant:~/jira$ kubectl get pod -n jira
NAME                    READY   STATUS    RESTARTS   AGE
jira-66c5d87466-sbpn4   1/1     Running   0          17s

### deploymentの状態確認
vagrant@vagrant:~/jira$ kubectl get deployments.apps -n jira
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
jira   1/1     1            1           37s
vagrant@vagrant:~/jira$

### serviceの状態確認
vagrant@vagrant:~/jira$ kubectl get svc -n jira
NAME   TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
jira   NodePort   10.106.9.57   <none>        8080:30000/TCP   102s
```

## webアクセスして初期設定を行う。
k8sのmasterのip addressは192.168.33.10だったので、
http://192.168.33.10:30000
にアクセスする。
<img width="1670" alt="スクリーンショット 2019-11-04 22.26.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/176e822e-3439-cbbd-07a9-a8a6b3a50fea.png">
Set it up for meを選択した状態で、Continue to MyAtlassianをクリックする。

![jira001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/a6d9b325-75ab-c67b-662a-1f6d6e216e81.png)
製品: Jira Software, License type: Jira Software, 組織名: 適宜, 稼働状況: 起動中, サーバID: 自動で入る
でライセンスの生成ボタンをクリックする。

![jira002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/ea4d5ca5-27bc-5cf8-ea55-ed00d584aa92.png)
はいをクリックする。

![jira003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/ef0e4688-0c87-f3c3-d419-99a6e0ce21ee.png)
Email, Username, Passwordを入力してNextをクリックする。

<img width="1668" alt="スクリーンショット 2019-11-05 6.40.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/b6c44da5-fec4-6f6c-6890-1e8eb2ceba86.png">
しばらく待つ。(数分)

<img width="1670" alt="スクリーンショット 2019-11-05 6.41.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/f497cdc4-a519-64f0-12c7-4c4ef19599fa.png">
無事にsetupが完了する。Let's get startedをクリックする。

![jira004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/9848fdc4-fe15-6520-b53e-0208a1ad7ece.png)
日本語を選択して、続行をクリックする。

![jira005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/f3bcd8c4-3f09-2841-a9a2-79361c78faea.png)
アバターを選択をクリックする。

<img width="630" alt="スクリーンショット 2019-11-05 6.47.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/644517f0-ddef-fdb1-663b-6159ebeab00e.png">
お好みのアバターを選択する。

![jira006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/a9935ab0-9a69-da26-9648-dbf34ba1de2c.png)
次へをクリックする。

<img width="1670" alt="スクリーンショット 2019-11-05 6.51.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/4869cb58-397f-bdb0-92c5-6b944c0aa94e.png">
ここまでくればひとまず完了。あとはサンプルプロジェクトを作成して使い方を練習したり、新規プロジェクトを作成して実際に使っていく。