Kubernetes: 클러스터 구축 단순화 kubeadm
14533 단어 kubernetes
kubeadm
을 대폭 간소화하는 메커니즘을 추가했다.1.4에 알파 기능으로 인해 생산 환경의 구축은 향후 버전을 기다려야 한다.수첩를 따라 구글 컴퓨터 엔진의 가상 기기에서 실제로 시도해 보았다.
개요
다음 4단계를 통해 간단하게 Kubernetes 클러스터를 만들 수 있습니다.(Docker의 이미지swarm join/init
kubeadm init
호스트 초기화kubeadm join --token xxxx yyy.yyy.yyy.yyy
직원 추가준비
GCP에 다음 가상 머신 3대(Master*1, Worker*2)가 생성되었습니다.
컴퓨터 유형: n1-1
OS: Ubuntu 16.04 LTS(amd64 xenial image built on 2016-09-30)
sudo su -
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y docker.io kubelet kubeadm kubectl kubernetes-cni
주 서버 설정
Maste에서 만kubeadm init
.
마스터에 로그인하여 다음을 수행합니다kubeadm init
.IP 주소가 여러 개인 경우 --api-advertise-addresses
에 공개된 IP 주소를 지정해야 합니다.sudo kubeadm init
1분도 안 돼서 Kubermetes의 주인이 초기화되었습니다.워커가 사용하는join 명령이 표시되기 때문에 제어해야 합니다.<master/tokens> generated token: "59fd3a.744950d511c9cd4b"
<master/pki> created keys and certificates in "/etc/kubernetes/pki"
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
<util/kubeconfig> created "/etc/kubernetes/admin.conf"
<master/apiclient> created API client configuration
<master/apiclient> created API client, waiting for the control plane to become ready
<master/apiclient> all control plane components are healthy after 26.083726 seconds
<master/apiclient> waiting for at least one node to register and become ready
<master/apiclient> first node is ready after 5.002739 seconds
<master/discovery> created essential addon: kube-discovery, waiting for it to become ready
<master/discovery> kube-discovery is ready after 10.002818 seconds
<master/addons> created essential addon: kube-proxy
<master/addons> created essential addon: kube-dns
Kubernetes master initialised successfully!
You can now join any number of machines by running the following on each node:
# worker用のコマンドが表示される
kubeadm join --token 59fd3a.744950d511c9cd4b 10.240.0.5
/etc/kubernetes
아래 파일이 생성되었습니다.인증서 등도 자동으로 만들어져서 좋아요. # 証明書
/etc/kubernetes/pki/apiserver-key.pem
/etc/kubernetes/pki/ca.pem
/etc/kubernetes/pki/apiserver-pub.pem
/etc/kubernetes/pki/ca-pub.pem
/etc/kubernetes/pki/tokens.csv
/etc/kubernetes/pki/sa-pub.pem
/etc/kubernetes/pki/apiserver.pem
/etc/kubernetes/pki/sa-key.pem
/etc/kubernetes/pki/ca-key.pem
# Masterコンポーネントの設定
/etc/kubernetes/manifests/kube-scheduler.json
/etc/kubernetes/manifests/kube-controller-manager.json
/etc/kubernetes/manifests/kube-apiserver.json
/etc/kubernetes/manifests/etcd.json
# kubeletの設定
/etc/kubernetes/admin.conf
/etc/kubernetes/kubelet.conf
Kubelet은 용기에서 시작됩니다. Kubernetes의 마스터 구성 요소 (scheduler, controller,apiserver, etcd) 는 다음과 같습니다./usr/bin/kubelet \
--kubeconfig=/etc/kubernetes/kubelet.conf \
--require-kubeconfig=true \
--pod-manifest-path=/etc/kubernetes/manifests \
--allow-privileged=true \
--network-plugin=cni \
--cni-conf-dir=/etc/cni/net.d \
--cni-bin-dir=/opt/cni/bin \
--cluster-dns=100.64.0.10 \
--cluster-domain=cluster.local \
--v=4
작업자 설정
작업자에 로그인하고 kubeadm init
에 표시된 명령을 사용하여 작업자 가상 시스템에서 실행합니다.sudo kubeadm join --token 59fd3a.744950d511c9cd4b 10.240.0.5
아래와 같이 노드 추가는 순식간에 완성될 것이다.아주 간단해요.<util/tokens> validating provided token
<node/discovery> created cluster info discovery client, requesting info from "http://10.240.0.5:9898/cluster-info/v1/?token-id=59fd3a"
<node/discovery> cluster info object received, verifying signature using given token
<node/discovery> cluster info signature and contents are valid, will use API endpoints [https://10.240.0.5:443]
<node/csr> created API client to obtain unique certificate for this node, generating keys and certificate signing request
<node/csr> received signed certificate from the API server, generating kubelet configuration
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
Node join complete:
* Certificate signing request sent to master and response
received.
* Kubelet informed of new secure connection details.
Run 'kubectl get nodes' on the master to see this machine join.
두 번째도 같은 절차를 밟는다.
생성된 /etc/kubernetes/kubelet.conf
을 보면 다음과 같이 인증서와 API 서버 등이 자동으로 설정됩니다.(일부 클리든 샤르 생략)
/etc/kubernetes/kubelet.confapiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0...Qo=
server: https://10.240.0.5:443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubelet-kube-worker2
name: kubelet-kube-worker2@kubernetes
current-context: kubelet-kube-worker2@kubernetes
kind: Config
preferences: {}
users:
- name: kubelet-kube-worker2
user:
client-certificate-data: LS0...o=
client-key-data: LS0t...o=
kubelet은 다음과 같이 일어서서 용기kube-proxy
에서 일어난다./usr/bin/kubelet \
--kubeconfig=/etc/kubernetes/kubelet.conf \
--require-kubeconfig=true \
--pod-manifest-path=/etc/kubernetes/manifests \
--allow-privileged=true \
--network-plugin=cni \
--cni-conf-dir=/etc/cni/net.d \
--cni-bin-dir=/opt/cni/bin \
--cluster-dns=100.64.0.10 \
--cluster-domain=cluster.local \
--v=4
마스터 측 확인 및 Pod 네트워크 설정
주 서버에 로그인하여 노드를 추가했는지 확인하십시오.kubectl get nodes
다음 노드가 추가되었는지 확인할 수 있습니다.NAME STATUS AGE
kube-master Ready 5m
kube-worker1 Ready 4m
kube-worker2 Ready 3m
마지막으로 Pod 네트워크를 설치합니다.Pod 네트워크 몇 개를 선택할 수 있습니다. 여기에서 매뉴얼에 따라 선택했습니다Weave Net.현재 Canal, Calico 선택 가능(참조: Networking and Network Policykubectl apply -f https://raw.githubusercontent.com/weaveworks/weave-kube/master/weave-daemonset.yaml
Pod은 다음과 같습니다.kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-kube-master 1/1 Running 0 5m
kube-system kube-apiserver-kube-master 1/1 Running 0 6m
kube-system kube-controller-manager-kube-master 1/1 Running 0 6m
kube-system kube-discovery-982812725-vr5or 1/1 Running 0 6m
kube-system kube-dns-2247936740-qclp0 2/3 Running 0 6m
kube-system kube-proxy-amd64-a6niu 1/1 Running 0 5m
kube-system kube-proxy-amd64-cgqz5 1/1 Running 0 4m
kube-system kube-proxy-amd64-mf3m7 1/1 Running 0 6m
kube-system kube-scheduler-kube-master 1/1 Running 0 5m
kube-system weave-net-kkipk 2/2 Running 0 26s
kube-system weave-net-xxtgw 2/2 Running 0 26s
kube-system weave-net-yyb64 2/2 Running 0 26s
동작 확인
행위를 검사하기 위해 배치예제 응용 프로그램.이것은 데이터베이스를 포함하는 10개 이상의 마이크로서비스 지점을 배치한 좋은 예이다.
마스터에서 다음을 수행합니다.git clone https://github.com/microservices-demo/microservices-demo
kubectl apply -f microservices-demo/deploy/kubernetes/manifests
모든 Pod이 실행되는지 확인합니다.kubectl get pods
NAME READY STATUS RESTARTS AGE
cart-3694116665-ethb2 1/1 Running 0 20m
cart-db-2305146297-k860k 1/1 Running 0 20m
catalogue-11453786-gs9k9 1/1 Running 0 20m
catalogue-db-393939662-bx08x 1/1 Running 0 20m
front-end-3820830240-3pvn7 1/1 Running 0 20m
orders-3498886496-jymtz 1/1 Running 0 20m
orders-db-1775353731-bsfa4 1/1 Running 0 20m
payment-3012088042-e7xn6 1/1 Running 0 20m
queue-master-936560853-omntu 1/1 Running 0 20m
rabbitmq-1897447621-fhb8y 1/1 Running 0 20m
shipping-1232389217-7aqn7 1/1 Running 0 20m
user-3090014237-y64z3 1/1 Running 0 20m
user-db-1338754314-q7mv9 1/1 Running 0 20m
NodePort를 사용하여 서비스 정보를 보고 예제 응용 프로그램에 액세스합니다.kubectl describe svc front-end
Name: front-end
Namespace: default
Labels: name=front-end
Selector: name=front-end
Type: NodePort
IP: 100.69.60.103
Port: <unset> 80/TCP
NodePort: <unset> 31992/TCP # このPortを使う
Endpoints: 10.38.0.3:8079
Session Affinity: None
노드 포트를 사용하여 액세스합니다.오픈 포트의 시간을 절약하기 위해 SSH PortForward를 로컬로 실행합니다.(NodePort는 매번 바뀌는데 이번에는 31992)ssh -L 31992:127.0.0.1:31992 <ユーザ名>@<VMのPublic IP>
방문http://localhost:31992/, 아래와 같은 샘플 네트워크 응용 프로그램 작업을 확인했다.
제한
수첩에서 보듯이 현황은 다음과 같은 제한이 있다.
sudo kubeadm init
<master/tokens> generated token: "59fd3a.744950d511c9cd4b"
<master/pki> created keys and certificates in "/etc/kubernetes/pki"
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
<util/kubeconfig> created "/etc/kubernetes/admin.conf"
<master/apiclient> created API client configuration
<master/apiclient> created API client, waiting for the control plane to become ready
<master/apiclient> all control plane components are healthy after 26.083726 seconds
<master/apiclient> waiting for at least one node to register and become ready
<master/apiclient> first node is ready after 5.002739 seconds
<master/discovery> created essential addon: kube-discovery, waiting for it to become ready
<master/discovery> kube-discovery is ready after 10.002818 seconds
<master/addons> created essential addon: kube-proxy
<master/addons> created essential addon: kube-dns
Kubernetes master initialised successfully!
You can now join any number of machines by running the following on each node:
# worker用のコマンドが表示される
kubeadm join --token 59fd3a.744950d511c9cd4b 10.240.0.5
# 証明書
/etc/kubernetes/pki/apiserver-key.pem
/etc/kubernetes/pki/ca.pem
/etc/kubernetes/pki/apiserver-pub.pem
/etc/kubernetes/pki/ca-pub.pem
/etc/kubernetes/pki/tokens.csv
/etc/kubernetes/pki/sa-pub.pem
/etc/kubernetes/pki/apiserver.pem
/etc/kubernetes/pki/sa-key.pem
/etc/kubernetes/pki/ca-key.pem
# Masterコンポーネントの設定
/etc/kubernetes/manifests/kube-scheduler.json
/etc/kubernetes/manifests/kube-controller-manager.json
/etc/kubernetes/manifests/kube-apiserver.json
/etc/kubernetes/manifests/etcd.json
# kubeletの設定
/etc/kubernetes/admin.conf
/etc/kubernetes/kubelet.conf
/usr/bin/kubelet \
--kubeconfig=/etc/kubernetes/kubelet.conf \
--require-kubeconfig=true \
--pod-manifest-path=/etc/kubernetes/manifests \
--allow-privileged=true \
--network-plugin=cni \
--cni-conf-dir=/etc/cni/net.d \
--cni-bin-dir=/opt/cni/bin \
--cluster-dns=100.64.0.10 \
--cluster-domain=cluster.local \
--v=4
작업자에 로그인하고
kubeadm init
에 표시된 명령을 사용하여 작업자 가상 시스템에서 실행합니다.sudo kubeadm join --token 59fd3a.744950d511c9cd4b 10.240.0.5
아래와 같이 노드 추가는 순식간에 완성될 것이다.아주 간단해요.<util/tokens> validating provided token
<node/discovery> created cluster info discovery client, requesting info from "http://10.240.0.5:9898/cluster-info/v1/?token-id=59fd3a"
<node/discovery> cluster info object received, verifying signature using given token
<node/discovery> cluster info signature and contents are valid, will use API endpoints [https://10.240.0.5:443]
<node/csr> created API client to obtain unique certificate for this node, generating keys and certificate signing request
<node/csr> received signed certificate from the API server, generating kubelet configuration
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
Node join complete:
* Certificate signing request sent to master and response
received.
* Kubelet informed of new secure connection details.
Run 'kubectl get nodes' on the master to see this machine join.
두 번째도 같은 절차를 밟는다.생성된
/etc/kubernetes/kubelet.conf
을 보면 다음과 같이 인증서와 API 서버 등이 자동으로 설정됩니다.(일부 클리든 샤르 생략)/etc/kubernetes/kubelet.conf
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0...Qo=
server: https://10.240.0.5:443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubelet-kube-worker2
name: kubelet-kube-worker2@kubernetes
current-context: kubelet-kube-worker2@kubernetes
kind: Config
preferences: {}
users:
- name: kubelet-kube-worker2
user:
client-certificate-data: LS0...o=
client-key-data: LS0t...o=
kubelet은 다음과 같이 일어서서 용기kube-proxy
에서 일어난다./usr/bin/kubelet \
--kubeconfig=/etc/kubernetes/kubelet.conf \
--require-kubeconfig=true \
--pod-manifest-path=/etc/kubernetes/manifests \
--allow-privileged=true \
--network-plugin=cni \
--cni-conf-dir=/etc/cni/net.d \
--cni-bin-dir=/opt/cni/bin \
--cluster-dns=100.64.0.10 \
--cluster-domain=cluster.local \
--v=4
마스터 측 확인 및 Pod 네트워크 설정
주 서버에 로그인하여 노드를 추가했는지 확인하십시오.kubectl get nodes
다음 노드가 추가되었는지 확인할 수 있습니다.NAME STATUS AGE
kube-master Ready 5m
kube-worker1 Ready 4m
kube-worker2 Ready 3m
마지막으로 Pod 네트워크를 설치합니다.Pod 네트워크 몇 개를 선택할 수 있습니다. 여기에서 매뉴얼에 따라 선택했습니다Weave Net.현재 Canal, Calico 선택 가능(참조: Networking and Network Policykubectl apply -f https://raw.githubusercontent.com/weaveworks/weave-kube/master/weave-daemonset.yaml
Pod은 다음과 같습니다.kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-kube-master 1/1 Running 0 5m
kube-system kube-apiserver-kube-master 1/1 Running 0 6m
kube-system kube-controller-manager-kube-master 1/1 Running 0 6m
kube-system kube-discovery-982812725-vr5or 1/1 Running 0 6m
kube-system kube-dns-2247936740-qclp0 2/3 Running 0 6m
kube-system kube-proxy-amd64-a6niu 1/1 Running 0 5m
kube-system kube-proxy-amd64-cgqz5 1/1 Running 0 4m
kube-system kube-proxy-amd64-mf3m7 1/1 Running 0 6m
kube-system kube-scheduler-kube-master 1/1 Running 0 5m
kube-system weave-net-kkipk 2/2 Running 0 26s
kube-system weave-net-xxtgw 2/2 Running 0 26s
kube-system weave-net-yyb64 2/2 Running 0 26s
동작 확인
행위를 검사하기 위해 배치예제 응용 프로그램.이것은 데이터베이스를 포함하는 10개 이상의 마이크로서비스 지점을 배치한 좋은 예이다.
마스터에서 다음을 수행합니다.git clone https://github.com/microservices-demo/microservices-demo
kubectl apply -f microservices-demo/deploy/kubernetes/manifests
모든 Pod이 실행되는지 확인합니다.kubectl get pods
NAME READY STATUS RESTARTS AGE
cart-3694116665-ethb2 1/1 Running 0 20m
cart-db-2305146297-k860k 1/1 Running 0 20m
catalogue-11453786-gs9k9 1/1 Running 0 20m
catalogue-db-393939662-bx08x 1/1 Running 0 20m
front-end-3820830240-3pvn7 1/1 Running 0 20m
orders-3498886496-jymtz 1/1 Running 0 20m
orders-db-1775353731-bsfa4 1/1 Running 0 20m
payment-3012088042-e7xn6 1/1 Running 0 20m
queue-master-936560853-omntu 1/1 Running 0 20m
rabbitmq-1897447621-fhb8y 1/1 Running 0 20m
shipping-1232389217-7aqn7 1/1 Running 0 20m
user-3090014237-y64z3 1/1 Running 0 20m
user-db-1338754314-q7mv9 1/1 Running 0 20m
NodePort를 사용하여 서비스 정보를 보고 예제 응용 프로그램에 액세스합니다.kubectl describe svc front-end
Name: front-end
Namespace: default
Labels: name=front-end
Selector: name=front-end
Type: NodePort
IP: 100.69.60.103
Port: <unset> 80/TCP
NodePort: <unset> 31992/TCP # このPortを使う
Endpoints: 10.38.0.3:8079
Session Affinity: None
노드 포트를 사용하여 액세스합니다.오픈 포트의 시간을 절약하기 위해 SSH PortForward를 로컬로 실행합니다.(NodePort는 매번 바뀌는데 이번에는 31992)ssh -L 31992:127.0.0.1:31992 <ユーザ名>@<VMのPublic IP>
방문http://localhost:31992/, 아래와 같은 샘플 네트워크 응용 프로그램 작업을 확인했다.
제한
수첩에서 보듯이 현황은 다음과 같은 제한이 있다.
kubectl get nodes
NAME STATUS AGE
kube-master Ready 5m
kube-worker1 Ready 4m
kube-worker2 Ready 3m
kubectl apply -f https://raw.githubusercontent.com/weaveworks/weave-kube/master/weave-daemonset.yaml
kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-kube-master 1/1 Running 0 5m
kube-system kube-apiserver-kube-master 1/1 Running 0 6m
kube-system kube-controller-manager-kube-master 1/1 Running 0 6m
kube-system kube-discovery-982812725-vr5or 1/1 Running 0 6m
kube-system kube-dns-2247936740-qclp0 2/3 Running 0 6m
kube-system kube-proxy-amd64-a6niu 1/1 Running 0 5m
kube-system kube-proxy-amd64-cgqz5 1/1 Running 0 4m
kube-system kube-proxy-amd64-mf3m7 1/1 Running 0 6m
kube-system kube-scheduler-kube-master 1/1 Running 0 5m
kube-system weave-net-kkipk 2/2 Running 0 26s
kube-system weave-net-xxtgw 2/2 Running 0 26s
kube-system weave-net-yyb64 2/2 Running 0 26s
행위를 검사하기 위해 배치예제 응용 프로그램.이것은 데이터베이스를 포함하는 10개 이상의 마이크로서비스 지점을 배치한 좋은 예이다.
마스터에서 다음을 수행합니다.
git clone https://github.com/microservices-demo/microservices-demo
kubectl apply -f microservices-demo/deploy/kubernetes/manifests
모든 Pod이 실행되는지 확인합니다.kubectl get pods
NAME READY STATUS RESTARTS AGE
cart-3694116665-ethb2 1/1 Running 0 20m
cart-db-2305146297-k860k 1/1 Running 0 20m
catalogue-11453786-gs9k9 1/1 Running 0 20m
catalogue-db-393939662-bx08x 1/1 Running 0 20m
front-end-3820830240-3pvn7 1/1 Running 0 20m
orders-3498886496-jymtz 1/1 Running 0 20m
orders-db-1775353731-bsfa4 1/1 Running 0 20m
payment-3012088042-e7xn6 1/1 Running 0 20m
queue-master-936560853-omntu 1/1 Running 0 20m
rabbitmq-1897447621-fhb8y 1/1 Running 0 20m
shipping-1232389217-7aqn7 1/1 Running 0 20m
user-3090014237-y64z3 1/1 Running 0 20m
user-db-1338754314-q7mv9 1/1 Running 0 20m
NodePort를 사용하여 서비스 정보를 보고 예제 응용 프로그램에 액세스합니다.kubectl describe svc front-end
Name: front-end
Namespace: default
Labels: name=front-end
Selector: name=front-end
Type: NodePort
IP: 100.69.60.103
Port: <unset> 80/TCP
NodePort: <unset> 31992/TCP # このPortを使う
Endpoints: 10.38.0.3:8079
Session Affinity: None
노드 포트를 사용하여 액세스합니다.오픈 포트의 시간을 절약하기 위해 SSH PortForward를 로컬로 실행합니다.(NodePort는 매번 바뀌는데 이번에는 31992)ssh -L 31992:127.0.0.1:31992 <ユーザ名>@<VMのPublic IP>
방문http://localhost:31992/, 아래와 같은 샘플 네트워크 응용 프로그램 작업을 확인했다.제한
수첩에서 보듯이 현황은 다음과 같은 제한이 있다.
kubectl logs
부동간단히 취득할 수 없음
kubectl
용kubeconfig
/etc/kubernetes/admin.conf
를 먼저 복제하는 방법참조 정보
Reference
이 문제에 관하여(Kubernetes: 클러스터 구축 단순화 kubeadm), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tkusumi/items/5908c91807107551e796텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)