k8s배치의 관리 노드배치5
19286 단어 개인 공유
버전이 다르기 때문에 링크를 제공하지 않습니다. 주의해야 할 것은 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:
[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
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 사이의 네트워크에 문제가 있을 수 있습니다.네트워크 구성 요소 배치는 다음 장을 보십시오