LoginSignup
1

More than 3 years have passed since last update.

Kubernetes Tips コマンド編

Last updated at Posted at 2020-05-03

kuberneteslogo.eabc6359f48c8e30b7a138c18177f3fd39338e05.png

GitHub

moby/moby
kubernetes/kubernetes

概要

Kubernetesについて学んだTips的な記事です。
2つに分けて書く予定で1本目となります。

  1. Kubernetes Tips コマンド編
  2. Kubernetes Tips yaml編

特徴

  • Immutable Infrastructure
  • 宣言的設定 (⇔ Imperative)
  • Auto Healing

[参考] Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー

インストール手順

2019/07現在の手順です(CentOS7を対象)

Master / Worker 共通

# hostsファイルの編集
$ vi /etc/hosts

# swap無効化
$ vi /etc/fstab
#UUID=07fc8b7b-40bc-4adb-b7fd-4c6c9973c021 /boot                   xfs     defaults        0 0
$ swapoff -a

$ echo net.bridge.bridge-nf-call-iptables = 1 > /etc/sysctl.d/99-bridge-nf-call-iptables

# SELinux OFF
$ setenforce 0
$ sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# ファイアウォール停止/無効化
$ systemctl stop firewalld && systemctl disable firewalld

# dockerに必要なツールインストール
$ systemctl stop firewalld && systemctl disable firewalld

# dockerインストール
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ yum install -y docker-ce
$ systemctl enable docker && sudo systemctl start docker

# kubernetesインストール前準備
$ sudo sh -c "cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
"

$ sudo sysctl --system
$ sudo sh -c "cat <<EOF > /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
EOF
"

# kubernetesインストール前準備
$ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
$ systemctl enable --now kubelet

Master

# 初期化処理
$ kubeadm init --apiserver-advertise-address '192.168.1.210' --service-cidr '10.0.0.0/24' --pod-network-cidr '172.16.0.0/24'
# --kubernetes-version : kubeadmのバージョン指定
# --apiserver-advertise-address : MasterのIPアドレス
# --service-cidr : VIP用を払い出す為にキープされるセグメント

# 初期化処理後の実行
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

Worker


コマンド

設定関連

config

contextはクラスタの情報、ユーザ、ネームスペースを組み合わせたものです。
この組み合わせで、どのKubernetesクラスタに接続するかが決まります

# 現在のコンテキスト
$ kubectl config current-context

# コンテキストの一覧
$ kubectl config get-contexts

# コンテキストの切り替え
$ kubectl config use-context [context]

# コンテキストの削除
kubectl config delete-cluster [context]

基本コマンド

用語 概要
Pod 1つ以上のコンテナと共有されたボリュームで構成
ReplicaSet Podのレプリカ数を管理
Deployment ReplicaSetを生成。デプロイの管理
Service Podeへの接続を解決してくれる抽象的なオブジェクト
情報取得
$ kubectl get all
# Deployment
# ReplicaSet
# Pod
# Service
# 上記4つをそれぞれ取得できる
Pod
# podを作成
$ kubectl create -f [pod.yml]

# pod一覧表示
$ kubectl get pod
## -o wide 詳細表示
## -A 全namespaceの結果を取得
## --show-labels ラベルも表示

# podを削除
$ kubectrl delete pod [Pod名]
$ kubectl delete -f [作成時のPod定義ファイル]<Paste>

# Podを強制削除
$ kubectl get pod -grace-period 0 -force

# podの起動
$ kubectl run testnginx --image nginx
## --image= イメージを指定
## --replicas= 起動するPod数を指定
## --env= 環境変数を渡す
## --labels= ラベルをつけて起動
## --namespace= namespaceを指定して起動

# Podでコマンドを実行する
$ kubectl exec [Pod名] -it /bin/bash

# Podの詳細情報を取得
$ kubectl describe pod [Pod名]
NameSpace

デフォルトで作成されるNamespaceは下記

  • default Namespaceを持たないオブジェクトのデフォルト
  • kube-system Kubernetesによって作成されたオブジェクのためのNamespace
  • kube-public 全ユーザが読み込めるNamespace
# NameSpace作成
$ kubectl create namespace [namespace]

# NameSpace確認
$ kubectl get namespace

# NameSpace削除
$ kubectl delete namespace [namespace]
$ kubectl delete -f namespace.yml

## createのサブコマンド
### clusterrole
### clusterrolebinding
### configmap
### deployment
### job
### namespace
### poddisruptionbudget
### priorityclass
### quota
### role
### rolebinding
### secret
### service
### serviceaccount
ReplicaSet

Pod のレプリカ(複製)数を維持するための機能

# ReplicaSetを作成
$ kubectl create -f [rc.yml]

# rc一覧表示
$ kubectl get replicasets
Service
# サービスの作成
$ kubectl expose deployment [Pod名]
## --port 
## --type
### サービスの種類
###   clusterIP : Kubernetes クラスタ内からのみアクセス可能なVIPを割り振る
###   nodePort : NodeのグローバルIP:Portで受付を行い、トラフィックを転送
###   loadBalancer : 
###   externalName : 外部のサービスに対してのエイリアスを作成

Jenkinsで遊ぶ

jenkins_pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: jenkins-pod
  labels:
    app: jenkins
spec:
  containers:
  - name: jenkins
    image: jenkins:latest
    ports:
    - containerPort: 8080
jenkins_service.yml
apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  selector:
    app: jenkins
  ports:
  - name: http
    port: 8080
# Podを作成
$ kubectl apply -f jenkins_pod.yml
$ kubectl get pods -o wide | grep jenkins
jenkins-pod                           1/1       Running   0          6m        10.1.0.22   docker-for-desktop

# Serviceを作成
$ kubectl apply -f jenkins_service.yml
$ kubectl get svc -o wide | grep jenkins
jenkins      NodePort    10.100.58.177    <none>        8080:31854/TCP   7m        app=jenkins

# Jenkinsのログイン情報を取得
$ kubectl exec -it jenkins-pod /bin/bash
$ jenkins@jenkins-pod:/$ cat /var/jenkins_home/secrets/initialAdminPassword
XXXXXXXXXXXXXXXXXX

スクリーンショット 2019-07-26 10.56.53.png

参考記事

[k8s] Pod < ReplicaSet < Deployment
実践 Kubernetes ~コンテナ管理のスタンダードツールを使いこなす
Dockerfileを書くためのベストプラクティス【参考訳】v18.09

参考スライド

Docker Compose利用者から見た Kubernetes 開発環境構築入門
そのコンテナ、もっと「賢く」置けますよ?
Dockerfileを改善するためのBest Practice 2019年版

参考書籍

Docker/Kubernetes 実践コンテナ開発入門
入門 Kubernetes
Kubernetes完全ガイド
Kubernetes実践ガイド クラウドネイティブアプリケーションを支える技術

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
1