Ubuntu에서 수동으로 Kubernetes 배포 상세 가이드 설치(좋은 가이드)

26125 단어

배경


두 대의 Ubuntu16.04 서버: ip는 각각 192.168.56.160과 192.168.56.161이다.Kubernetes 버전: 1.5.5 Docker 버전: 1.12.6 etcd 버전: 2.2.1 flannel 버전: 0.5.6 그중 160 서버는 Kubernetes의 마스터 노드를 하고 node 노드를 한다.161 서버는 node 노드만 합니다.마스터 노드에 배치해야 합니다:kube-apiserver,kube-controller-manager,kube-scheduler,etcd 서비스.node 노드에 배치:kubelet,kube-proxy,docker와flannel 서비스.

다운로드


Kubernetes 다운로드


클라이언트 바이너리 다운로드:https://dl.k8s.io/v1.5.5/kubernetes-client-linux-amd64.tar.gz서버 바이너리 다운로드:https://dl.k8s.io/v1.5.5/kubernetes-server-linux-amd64.tar.gz내 서버는 linux,amd64입니다. 다른 환경이 있으면 페이지에 가서 실행 가능한 파일인kubernetes 디렉터리를 다운로드하여 서버와client 항목의kube-apiserver,kube-controller-manager,kubectl,kubelet,kube-proxy,kube-scheduler 등을/usr/bin/디렉터리로 복사할 수 있습니다.

etcd 다운로드


etcd의githubrelease 다운로드는 모두 AWS S3에 놓여 있습니다. 이 네트워크는 접근할 수 없거나 느려서 Linux 공사 자원소에 가서 패키지를 다운로드할 수 있습니다.이외에도 etcd 원본을 직접 컴파일하여 etcd의 실행 가능한 파일을 얻을 수 있습니다.etcd의 실행 가능한 파일 etcd와 etcdctl를/usr/bin/디렉터리로 복사합니다.
etcd-v2.2.1-linux-amd64.tar는 Linux Community Resource Station에서 다운로드할 수 있습니다.
분할선 -----------------------------------------------------------
무료 다운로드 주소는http://linux.linuxidc.com/
사용자 이름과 비밀번호는 모두 www.linuxidc입니다.com
구체적인 다운로드 디렉토리는 2017년 자료/4월/5일/Ubuntu에서 Kubernetes 배포 지침을 수동으로 설치/
다운로드 방법http://www.linuxidc.com/Linux/2013-07/87684.htm
분할선 -----------------------------------------------------------

flannel 다운로드


flannel과 etcd는 모두 코어OS 회사의 제품이기 때문에 flannel의github release 다운로드도 AWS S3에 놓여 있다.하지만 다행히 플랜넬의 컴파일은 간단해서github에서 다운로드한 후 직접 컴파일하면 된다.그리고 flannel의bin이나dist 디렉터리에서 (버전이 다르면 디렉터리가 다를 수 있음) flannel 실행 파일을 생성합니다.
$ git clone -b v0.5.6 https://github.com/coreos/flannel.git
$ cd flannel
$ ./build

구체적인 컴파일 방법은 다를 수 있습니다. flannel 디렉터리에 있는 README를 참고하십시오.md 파일.실행 가능한 파일flanneld를/usr/bin/디렉터리로 복사합니다./usr/bin/flannel 디렉터리를 만들고dist 디렉터리에 있는 mk-docker-opts를 만듭니다.sh 파일을/usr/bin/flannel/로 복사합니다.

Kubernetes master 구성


etcd 구성


데이터 디렉토리 만들기

$ sudo mkdir -p /var/lib/etcd/

구성 디렉토리 및 파일 만들기

$ sudo mkdir -p /etc/etcd/
$ sudo vim /etc/etcd/etcd.conf

ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.160:2379"

systemd 파일 만들기

$ sudo vim /lib/systemd/system/etcd.service

[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target


[Service]
User=root
Type=notify
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

서비스 시작

$ sudo systemctl daemon-reload 
$ sudo systemctl enable etcd
$ sudo systemctl start etcd

테스트 서비스 포트

$ sudo systemctl status etcd

● etcd.service - Etcd Server
   Loaded: loaded (/lib/systemd/system/etcd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-03-27 11:19:35 CST; 7s ago
...

포트가 제대로 열려 있는지 다시 확인하십시오.
$ netstat -apn | grep 2379
tcp6       0      0 :::2379                 :::*                    LISTEN      7211/etcd 

etcd 네트워크 만들기

$ etcdctl set /coreos.com/network/config '{ "Network": "192.168.4.0/24" }'

만약 etcd 집단을 배치한다면, 모든 etcd 서버에서 상술한 절차를 실행해야 한다.하지만 여기는 스탠다드론만 사용했기 때문에 제 etcd 서비스는 끝났습니다.

Kubernetes 공통 구성


Kubernetes 구성 디렉토리 만들기

$ sudo mkdir /etc/kubernetes

Kubernetes 일반 프로파일


/etc/kubernetes/config 파일에는 Kubernetes 구성 요소의 일반적인 설정 정보가 저장되어 있습니다.
$ sudo vim /etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.56.160:8080"

kube-apiserver 서비스 설정


Kubernetes의 마스터 호스트에서

kube-apiserver 프로필 만들기


kube-apiserver의 전용 프로필은/etc/kubernetes/apiserver입니다.
$ sudo vim /etc/kubernetes/apiserver

###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
#

# The address on the local server to listen to.
KUBE_API_ADDRESS="--address=0.0.0.0"
#KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"

# The port on the local server to listen on.
KUBE_API_PORT="--port=8080"

# Port minions listen on
KUBELET_PORT="--kubelet-port=10250"

# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.56.160:2379"

# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=192.168.4.0/24"

# default admission control policies
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"

# Add your own!
KUBE_API_ARGS=""

systemd 파일 만들기

$ sudo vim /lib/systemd/system/kube-apiserver.service

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
After=etcd.service
Wants=etcd.service

[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver \
        $KUBE_LOGTOSTDERR \
        $KUBE_LOG_LEVEL \
        $KUBE_ETCD_SERVERS \
        $KUBE_API_ADDRESS \
        $KUBE_API_PORT \
        $KUBELET_PORT \
        $KUBE_ALLOW_PRIV \
        $KUBE_SERVICE_ADDRESSES \
        $KUBE_ADMISSION_CONTROL \
        $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

kube-controller-manager 서비스 설정


kube-controller-manager 프로필 만들기


kube-controller-manager의 전용 프로필은/etc/kubernetes/controller-manager
$ sudo vim /etc/kubernetes/controller-manager

KUBE_CONTROLLER_MANAGER_ARGS=""

systemd 파일 만들기

$ sudo vim /lib/systemd/system/kube-controller-manager.service

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=etcd.service
After=kube-apiserver.service
Requires=etcd.service
Requires=kube-apiserver.service

[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager \
        $KUBE_LOGTOSTDERR \
        $KUBE_LOG_LEVEL \
        $KUBE_MASTER \
        $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

kube-scheduler 서비스 설정


kube-scheduler 프로필 만들기


kube-scheduler의 전용 프로필은/etc/kubernetes/scheduler
$ sudo vim /etc/kubernetes/scheduler

KUBE_SCHEDULER_ARGS=""

systemd 파일 만들기

$ sudo vim /lib/systemd/system/kube-scheduler.service

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler \
        $KUBE_LOGTOSTDERR \
        $KUBE_MASTER
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

Kubernetes master 노드 서비스 시작

$ sudo systemctl daemon-reload
$ sudo systemctl enable kube-apiserver kube-controller-manager kube-scheduler
$ sudo systemctl start kube-apiserver kube-controller-manager kube-scheduler

Kubernetes node 구성


Kubernetes node 노드도/etc/kubernetes/config 파일을 설정해야 합니다. 내용은 Kubernetes mater 노드와 일치합니다.

flannel 구성


구성 디렉토리 및 파일 만들기

$ sudo vim /etc/default/flanneld.conf

# Flanneld configuration options  

# etcd url location.  Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.56.160:2379"

# etcd config key.  This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/coreos.com/network"

# Any additional options that you want to pass
#FLANNEL_OPTIONS=""

여기서 FLANNEL_ETCD_PREFIX 옵션은 방금 설정한 etcd 네트워크입니다.

systemd 파일 만들기

$ sudo vim /lib/systemd/system/flanneld.service

[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
After=etcd.service
Before=docker.service

[Service]
User=root
EnvironmentFile=/etc/default/flanneld.conf
ExecStart=/usr/bin/flanneld \
        -etcd-endpoints=${FLANNEL_ETCD_ENDPOINTS} \
        -etcd-prefix=${FLANNEL_ETCD_PREFIX} \
        $FLANNEL_OPTIONS
ExecStartPost=/usr/bin/flannel/mk-docker-opts.sh -k DOCKER_OPTS -d /run/flannel/docker
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
RequiredBy=docker.service

서비스 시작

$ sudo systemctl daemon-reload 
$ sudo systemctl enable flanneld
$ sudo systemctl start flanneld

서비스 시작 여부 보기

$ sudo systemctl status flanneld
● flanneld.service - Flanneld
   Loaded: loaded (/lib/systemd/system/flanneld.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-03-27 11:59:00 CST; 6min ago
...

docker 구성


docker 설치


apt를 통해docker를 설치합니다.
$ sudo apt -y install docker.io

flannel 작용 docker 네트워크


docker의 시스템 프로필을 수정합니다.
$ sudo mkdir /lib/systemd/system/docker.service.d
$ sudo vim /lib/systemd/system/docker.service.d/flannel.conf

[Service]
EnvironmentFile=-/run/flannel/docker

docker 서비스를 다시 시작합니다.
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

docker에 flannel 네트워크가 있는지 확인하십시오.
$ sudo ps -ef | grep docker

root     11285     1  1 15:14 ?        00:00:01 /usr/bin/dockerd -H fd:// --bip=192.168.4.129/25 --ip-masq=true --mtu=1472
...

kubelet 서비스 설정


kubelet 데이터 디렉터리 만들기

$ sudo mkdir /var/lib/kubelet

kubelete 프로필 만들기


kubelet의 전용 프로필은/etc/kubernetes/kubelet입니다.
$ sudo vim /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=192.168.56.161"
KUBELET_API_SERVER="--api-servers=http://192.168.56.160:8080"
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.RedHat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS="--enable-server=true --enable-debugging-handlers=true"

systemd 파일 만들기

$ sudo vim /lib/systemd/system/kubelet.service

[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet \
        $KUBE_LOGTOSTDERR \
        $KUBE_LOG_LEVEL \
        $KUBELET_API_SERVER \
        $KUBELET_ADDRESS \
        $KUBELET_PORT \
        $KUBELET_HOSTNAME \
        $KUBE_ALLOW_PRIV \
        $KUBELET_POD_INFRA_CONTAINER \
        $KUBELET_ARGS
Restart=on-failure
KillMode=process

[Install]
WantedBy=multi-user.target

kubelet 서비스 시작

$ sudo systemctl daemon-reload
$ sudo systemctl enable kubelet
$ sudo systemctl start kubelet

kube-proxy 서비스 설정


kube-proxy 프로필 만들기


kube-proxy의 전용 프로필은/etc/kubernetes/proxy
$ sudo vim /etc/kubernetes/proxy

# kubernetes proxy config
# default config should be adequate
# Add your own!
KUBE_PROXY_ARGS=""

systemd 파일 만들기

$ sudo vim /lib/systemd/system/kube-proxy.service

[Unit]
Description=Kubernetes Proxy
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy \
        $KUBE_LOGTOSTDERR \
        $KUBE_LOG_LEVEL \
        $KUBE_MASTER \
        $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

kube-proxy 서비스 시작

$ sudo systemctl daemon-reload
$ sudo systemctl enable kube-proxy
$ sudo systemctl start kube-proxy

node 상태 조회


kubectl get node 명령을 실행하여 node 상태를 보십시오.모두 Ready 상태일 때 node 노드가 마스터에 성공적으로 연결되었음을 나타냅니다. 이 상태가 아니라면 이 노드에 가서 원인을 찾아야 합니다.journalctl-u kubelet을 통해 가능합니다.서비스 명령은kubelet 서비스의 로그를 볼 수 있습니다.
$ kubectl get node
NAME             STATUS     AGE
192.168.56.160   Ready      d
192.168.56.161   Ready      d

Kubernetes 테스트


Kubernetes가 성공적으로 설치되었는지 테스트합니다.

yaml 파일 작성


Kubernetes master에서 nginx를 만듭니다.yaml,nginx의 Replication Controller를 만드는 데 사용됩니다.
$ vim rc_nginx.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  replicas: 2
  selector:
    name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

pod 만들기


kubectl create 명령을 실행하여 ReplicationController를 만듭니다.이 Replication Controller 구성에는 두 개의 복사본이 있고 Kubernetes Node가 두 개 있습니다. 따라서 두 개의 Node에서 각각 Pod을 실행할 것입니다.주의: 이 과정은 매우 긴 시간이 걸릴 수 있습니다. 인터넷에서nginx렌즈, 그리고pod-infrastructure라는 관건적인 렌즈를 가져올 수 있습니다.
$ kubectl create -f rc_nginx.yaml

질의 상태


kubectl getpod와 rc 명령을 실행하여pod와 rc 상태를 보십시오.처음에는 containerCreating 상태가 될 수 있으며, 필요한 렌즈 다운로드가 완료되면 구체적인 용기를 만들 수 있습니다.pod 상태는 실행 상태를 표시해야 합니다.
$ kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
nginx     2         2         2         m

$ kubectl get pod -o wide
NAME          READY     STATUS    RESTARTS   AGE       IP              NODE
nginx-j5x4   1/1       Running   0          m        192.168.4.130   192.168.56.160
nginx-bd28   1/1       Running   0          m        192.168.4.130   192.168.56.161

큰일났다!!!

좋은 웹페이지 즐겨찾기