k8s배치의 관리 노드배치5

19286 단어 개인 공유
1 bin 파일 다운로드
버전이 다르기 때문에 링크를 제공하지 않습니다. 주의해야 할 것은 k8s 사이트가 조화롭게 될 수 있다는 것입니다.스스로 과학적으로 인터넷에 접속하여 다운로드를 진행하고, 다운로드 후/opt/kubernetes/bin으로 압축을 풀어야 한다.
2 kube-apiserver에서 사용하는 클라이언트 token 파일 만들기
mkdir/opt/kubernetes/token #//프로그램 로그인 생성 3rdsession
export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')    
cat > /opt/kubernetes/token/bootstrap-token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

3 Kube API Server 시작 파일 만들기
vi /usr/lib/systemd/system/kube-apiserver.service

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/conf/apiserver.conf
ExecStart=/opt/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target

mkdir/var/log/kubernetes/apiserver
4 kube API Server 구성 파일 생성 및 시작
vi/opt/kubernetes/conf/apiserver.conf
KUBE_APISERVER_OPTS="--logtostderr=true \
--v=4 \
--etcd-servers=https://hadoop1:2379,https://hadoop2:2379,https://hadoop3:2379 \
--bind-address=10.20.24.15 \
--secure-port=6443 \
--advertise-address=10.20.24.15 \
--allow-privileged=true \
--service-cluster-ip-range=10.1.0.0/24 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode=RBAC,Node \
--enable-bootstrap-token-auth \
--token-auth-file=/opt/kubernetes/token/bootstrap-token.csv \
--service-node-port-range=30000-50000 \
--tls-cert-file=/opt/kubernetes/ssl/kubernetes.pem \
--tls-private-key-file=/opt/kubernetes/ssl/kubernetes-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
--etcd-cafile=/opt/kubernetes/ssl/ca.pem \
--etcd-certfile=/opt/kubernetes/ssl/kubernetes.pem \
--etcd-keyfile=/opt/kubernetes/ssl/kubernetes-key.pem \

# – logtostderr=true 그죠 로그를syslog로 출력하고 디렉터리로 출력하려면false로 설정해야 합니다
systemctl daemon-reload systemctl enable kube-apiserver systemctl start kube-apiserver systemctl status kube-apiserver
5 Kube Controller Manager 시작 파일 만들기
vi/usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/conf/controller-manager.conf
ExecStart=/opt/kubernetes/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target

mkdir/var/log/kubernetes/controller-manager
6 kube Controller Manager 구성 파일을 만들고 시작
#vi/opt/kubernetes/conf/controller-manager.conf
KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false\
--v=4 \
--master=127.0.0.1:8080 \
--leader-elect=true \
--bind-address=127.0.0.1 \
--service-cluster-ip-range=10.1.0.0/24 \
--cluster-cidr=10.2.0.0/16 \
--cluster-name=kubernetes \
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \
--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem \
--service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \
--root-ca-file=/opt/kubernetes/ssl/ca.pem \ 
--log-dir=/var/log/kubernetes/controller-manager"

주: - 서비스-cluster-ip-range 매개 변수는 Cluster에서 서비스하는 CIDR 범위를 지정합니다. 이 네트워크는 각 노드 간에 루트가 이루어지지 않아야 하며kube-apiserver의 매개 변수와 일치해야 합니다. - cluster-cidr 매개 변수는pod 세그먼트를 지정해야 합니다. - cluster-cidr = 이것은 집단pod의 세그먼트 배치에서 부하 문제가 발생하고 집단이 시작될 때 발생하는 것입니다.kubectl delete svc kubernetes를 실행한 후 다시 정상적으로 태어났습니다.svc를 보면 443이apiserver의 6443로 전송된 것을 발견할 수 있습니다.바로apiserver입니다.
in Kubernetes, all three of the following arguments must be equal to, or contain, the Calico IP pool CIDRs:
  • kube-apiserver: --pod-network-cidr
  • kube-proxy: --cluster-cidr
  • kube-controller-manager: --cluster-cidr

  • [root@hadoop1 ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 443/TCP 23s
    systemctl daemon-reload
    systemctl enable kube-controller-manager
    systemctl start kube-controller-manager
    systemctl status kube-controller-manager
    

    7 Kube Scheduler 시작 파일 만들기
    #vi/usr/lib/systemd/system/kube-scheduler.service
    [Unit]
    Description=Kubernetes Scheduler
    Documentation=https://github.com/kubernetes/kubernetes
    [Service]
    EnvironmentFile=-/opt/kubernetes/conf/scheduler.conf
    ExecStart=/opt/kubernetes/bin/kube-scheduler $KUBE_SCHEDULER_OPTS
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    

    mkdir/var/log/kubernetes/scheduler
    8 Kube Scheduler 구성 파일을 만들고 시작
    #vi/opt/kubernetes/conf/scheduler.conf
    ###
    #kubernetes scheduler config
    #
    #default config should be adequate
    #
    #Add your own!
    
    KUBE_SCHEDULER_OPTS="--logtostderr=false --v=4 \
       --master=127.0.0.1:8080 --leader-elect=true \
       --log-dir=/var/log/kubernetes/scheduler"
    

    -address: 127.0.0.1:10251(기본값은 10251) 포트에서 http/metrics 요청을 수신합니다.kube-scheduler는https 요청을 받을 수 없습니다.kubeconfig:kubeconfig 파일 경로를 지정하고kube-scheduler를 사용하여kube-apiserver를 연결하고 검증합니다.leader-elect=true: 집단 실행 모드로 선거 기능 사용하기;리더로 선택된 노드는 처리 작업을 맡고 다른 노드는 막힌 상태입니다.
    systemctl daemon-reload
    systemctl enable kube-scheduler
    systemctl start kube-scheduler
    systemctl status kube-scheduler
    

    9 kubectl kubeconfig 파일 만들기
    클러스터 매개변수 설정
    kubectl config set-cluster kubernetes --certificate-authority=/opt/kubernetes/ssl/ca.pem \
    --embed-certs=true --server=https://k8s-master1:6443
    

    Cluster “kubernetes” set.Cluster “kubernetes” set.
    클라이언트 인증 매개 변수 설정
    kubectl config set-credentials admin --client-certificate=/opt/kubernetes/ssl/admin.pem \
    --embed-certs=true --client-key=/opt/kubernetes/ssl/admin-key.pem
    

    User “admin” set.
    컨텍스트 매개변수 설정하기
    kubectl config set-context kubernetes --cluster=kubernetes --user=admin
    

    Context “kubernetes” created.
    기본 컨텍스트 설정
    kubectl config use-context kubernetes
    

    Switched to context “kubernetes”.
    구성 요소 상태 확인
    #kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {“health”:“true”} etcd-1 Healthy {“health”:“true”} etcd-2 Healthy {“health”:“true”}
    캐릭터 바인딩 만들기
    kubectl create clusterrolebinding --user system:serviceaccount:kube-system:default kube-system-cluster-admin --clusterrole cluster-admin
    

    clusterrolebindings.rbac.authorization.k8s.io “kube-system-cluster-admin”
    참고: kubernetes – 1.11.0 이전에는 다음 명령을 사용합니다.
    #kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
    

    clusterrolebinding.rbac.authorization.k8s.io “kubelet-bootstrap” created
    10 kubelet bootstrapping kubeconfig 파일 만들기
    # TLS Bootstrapping Token을 만들고 kube-api를 시작할 때 완료
    export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
    cat > token.csv <<EOF
    ${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
    EOF
    

    # kubelet bootstrapping kubeconfig 만들기
    export KUBE_APISERVER=“https://k8s-master1:6443”
    클러스터 매개변수 설정
    kubectl config set-cluster kubernetes \
      --certificate-authority=/opt/kubernetes/ssl/ca.pem \
      --embed-certs=true \
      --server=${KUBE_APISERVER} \
      --kubeconfig=bootstrap.kubeconfig
    

    클라이언트 인증 매개 변수 설정
    kubectl config set-credentials kubelet-bootstrap \
      --token=${BOOTSTRAP_TOKEN} \
      --kubeconfig=bootstrap.kubeconfig
    

    컨텍스트 매개변수 설정하기
    kubectl config set-context default \
      --cluster=kubernetes \
      --user=kubelet-bootstrap \
      --kubeconfig=bootstrap.kubeconfig
    

    기본 컨텍스트 설정
    kubectl config use-context default \
    --kubeconfig=bootstrap.kubeconfig
    

    11 kube-proxy kubeconfig 파일 만들기
    현재 이해는kube-proxy 인증서를 통해 집단 인증을 생성하는kubeconfig입니다.시작 매개 변수에서 지정pem 파일을 사용할 필요가 없습니다
    클러스터 매개변수 설정
    kubectl config set-cluster kubernetes \
    --certificate-authority=/opt/kubernetes/ssl/ca.pem \
    --embed-certs=true \
    --server=https://k8s-master1:6443 \
    --kubeconfig=kube-proxy.kubeconfig
    

    Cluster “kubernetes” set.
    클라이언트 인증 매개 변수 설정
    kubectl config set-credentials kube-proxy \
    --client-certificate=/opt/kubernetes/ssl/kube-proxy.pem \
    --client-key=/opt/kubernetes/ssl/kube-proxy-key.pem \
    --embed-certs=true \
    --kubeconfig=kube-proxy.kubeconfig
    

    User “kube-proxy” set.
    컨텍스트 매개변수 설정하기
    kubectl config set-context default \
    --cluster=kubernetes \
    --user=kube-proxy \
    --kubeconfig=kube-proxy.kubeconfig
    

    Context “default” created.
    기본 컨텍스트 설정
    kubectl config use-context default \
    --kubeconfig=kube-proxy.kubeconfig
    

    Switched to context “default”.
    kube-proxy를 나눠주세요.kubeconfig 파일에서worker 노드로
    12 worker 노드 배치 kubelet 및 kube-proxy
    kubelet 작업 디렉터리 만들기 (노드마다 같은 조작)
    mkdir/var/lib/kubelet
    1 kubelet 구성 파일 만들기
    #vi/opt/kubernetes/conf/kubelet.conf
    KUBELET_OPTS="--logtostderr=false \
    --v=4 \
    --kubeconfig=/opt/kubernetes/conf/kubelet.kubeconfig \
    --bootstrap-kubeconfig=/opt/kubernetes/conf/bootstrap.kubeconfig \
    --root-dir=/var/lib/kubelet \   #   kubelet     ,emptydir           。
    --config=/opt/kubernetes/conf/kubelet.config \
    --log-dir=/var/log/kubernetes/kubelet \
    --cert-dir=/opt/kubernetes/ssl \
    --allow-privileged=true \
    --network-plugin=cni \
    ~~--cni-conf-dir=/etc/cni/net.d \
    --cni-bin-dir=/opt/cni/bin \~~ 
    --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
    

    삭제선 부분은kubernetes가 그룹에 처음 가입했을 때 삭제해야 합니다. 그렇지 않으면 대응하는 폴더가 없습니다.calico가 배치된 후에 수정하고 cni 플러그인을 사용하십시오. 그렇지 않으면pod에서 가져온 IP는 기본docker0입니다.PS
  • KUBELET_ADDRESS가 노드별 네이티브 IP로 설정됨, KUBELETHOSTNAME 노드별 호스트 이름으로 설정, KUBELETPOD_INFRA_CONTAINER는 KUBELET 로 설정할 수 있는 개인 컨테이너 창고 주소로 설정할 수 있습니다.POD_INFRA_CONTAINER= "–pod infra container image={사유 미러 창고 ip}:80/k8s/pause-amd64:v3.0", cni-bin-dir 값의 경로는calico 네트워크를 만들 때 자동으로 추가
  • cni 설정이 없는 docker 또는 기본 docker0 네트워크 카드
  • kubelet은 인증서를 수동으로 생성하지 않습니다. 기본값은/opt/kubernetes/conf/bootstrap.kubeconfig 이(가) 에 신청했습니다.

  • 2 Kubelet 프로필 생성 및 시작
    #vi/usr/lib/systemd/system/kubelet.service
    [Unit]
    Description=Kubernetes Kubelet
    After=docker.service
    Requires=docker.service
    
    
    [Service]
    EnvironmentFile=-/opt/kubernetes/conf/kubelet.conf
    ExecStart=/opt/kubernetes/bin/kubelet $KUBELET_OPTS
    Restart=on-failure
    KillMode=process
    
    
    [Install]
    WantedBy=multi-user.target
    
    systemctl daemon-reload
    systemctl enable kubelet
    systemctl start kubelet
    systemctl status kubelet
    

    3 CSR 인증서 요청 보기(k8s-master에서 실행)
    kubectl get csr NAME AGE REQUESTOR CONDITION node-csr-0Vg_d__0vYzmrMn7o2S7jsek4xuQJ2v_YuCKwWN9n7M 4h kubelet-bootstrap Pending
    4 kubelet의 TLS 인증서 요청 승인(k8s-master에서 실행)
    kubectl certificate approve xxx
    대량 승인 #kubectl get csr |grep'Pending'| awk'NR>0 {print $1}'| xargs kubectl certificate approve
    certificatesigningrequest.certificates.k8s.io “node-csr-0Vg_d__0vYzmrMn7o2S7jsek4xuQJ2v_YuCKwWN9n7M” approved
    5 노드 상태 보기 Ready 상태라면 모든 것이 정상입니다 (k8s-master에서 실행됨)
    #kubectl get node
    NAME STATUS ROLES AGE VERSION work-node01 Ready 11h v1.10.4 work-node02 Ready 11h v1.10.4
    6 kube-proxy 시작 파일 만들기
    #vi/usr/lib/systemd/system/kube-proxy.service
    [Unit]
    Description=Kubernetes Proxy
    After=network.target
    [Service]
    EnvironmentFile=-/opt/kubernetes/conf/kube-proxy.conf
    ExecStart=/opt/kubernetes/bin/kube-proxy $KUBE_PROXY_OPTS
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    

    11) kube-proxy 프로필을 만들고 시작
    #vi/opt/kubernetes/conf/kube-proxy.conf
    KUBE_PROXY_OPTS="--logtostderr=true \
    --v=4 \
    --cluster-cidr=10.2.0.0/24 \
    --proxy-mode=ipvs  \
    --masquerade-all=true \
    --kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig"
    
    --proxy-mode=ipvs  \
    --masquerade-all=true 
    

    주:bind-address 값은 각node 노드의 본체 IP로 설정하고,hostname-override 값은 각node 노드의 호스트 이름으로 설정합니다.
    kube-proxy를 나눠주세요.conf에서 각 node 노드로
    scp/opt/kubernetes/conf/kube-proxy.conf root@hadoop3:/opt/kubernetes/conf/
    systemctl daemon-reload systemctl enable kube-proxy systemctl start kube-proxy systemctl status kube-proxy
    계획에 주의해야 할 것은proxy에는 두 가지 모델이 있는데 ipvm와 iptavle이다.매개 변수 후속 정리
    12) LVS 상태 보기 - TCP 10.1.0.1:443 rr persistent 10800이 보이지 않습니다.
    #ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.1.0.1:443 rr persistent 10800 -> 10.20.24.15:6443 Masq 1 0 0
    이로써 k8s 집단이 구축되었고 docker pod도 배치할 수 있지만 네트워크 구성 요소가 아직 배치되지 않아pod 사이의 네트워크에 문제가 있을 수 있습니다.네트워크 구성 요소 배치는 다음 장을 보십시오

    좋은 웹페이지 즐겨찾기