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.)