는 Kubernetes 이진 다중 노드 네트워크 배치 라인 (예를!)

선행 검토

部署K8s多节点,首先得署单节master的k8s群集
详情参考:
blog.csdn.net/caozhengtao1213/article/details/103987039

이 부분에서

1. 배포 MASTER2
2.Nginx 부하 배포 -keeplived 서비스의 균형을
3.node 노드 구성을 수정 파일 단결 VIP
포드 만들기 4.
사용자 인터페이스 디스플레이 인터페이스 만들기 (5)


환경 준비

역할 주소 설치 구성 요소
석사 192.168.142.129 KUBE-apiserver KUBE-컨트롤러 관리자 KUBE-스케줄러 etcd
MASTER2 192.168.142.120 KUBE-apiserver KUBE-컨트롤러 관리자 KUBE-스케줄러
노드 1 192.168.142.130 kubelet KUBE-프록시 고정 표시기 플란넬 etcd
노드 2 192.168.142.131 kubelet KUBE-프록시 고정 표시기 플란넬 etcd
nginx1 (LBM) 192.168.142.140 nginx를 keepalived
nginx2 (LBB) 192.168.142.150 nginx를 keepalived
요인 192.168.142.20 -

첫째, 배포 MASTER2

관련 디렉토리 1. 원격 복제 마스터

  • 방화벽 및 보안 기능을 해제
systemctl stop firewalld.service
setenforce 0
  • 복사 MASTER2에 디렉토리는 Kubernetes
scp -r /opt/kubernetes/ [email protected]:/opt
  • (인증서 포함) MASTER2에 복사 etcd 디렉토리
scp -r /opt/etcd/ [email protected]:/opt
  • MASTER2에 복제 서비스 시작 스크립트
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service [email protected]:/usr/lib/systemd/system/

2. 수정 KUBE-apiserver 프로필

vim /opt/kubernetes/cfg/kube-apiserver

#将第5和7行IP地址改为master2主机的地址
--bind-address=192.168.142.120 \
--advertise-address=192.168.142.120 \

3. 시작 서비스와 카이에서 부팅 설정

systemctl start kube-apiserver.service 
systemctl enable kube-apiserver.service

systemctl start kube-controller-manager.service 
systemctl enable kube-controller-manager.service

systemctl start kube-scheduler.service
systemctl enable kube-scheduler.service

4. 추가 환경 변수 및 발효

vim /etc/profile
#末尾追加
export PATH=$PATH:/opt/kubernetes/bin/

source /etc/profile

노드 노드를 확인 (5)

kubectl get node
NAME              STATUS   ROLES    AGE     VERSION
192.168.142.130   Ready    <none>   10d12h   v1.12.3
192.168.142.131   Ready    <none>   10d11h   v1.12.3

두, Nginx에 부하 서비스 배포를 균형 -keeplived

작업 LBM 및 LBB 결국 1, 설치 서비스는 nginx에

  • 스크립트 및 keepalived.conf 홈 디렉토리를 복사 Nginx.sh (나중에 사용됩니다)
#nginx.sh

cat > /etc/yum.repos.d/nginx.repo << EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOF

stream {

   log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    access_log  /var/log/nginx/k8s-access.log  main;

    upstream k8s-apiserver {
        server 10.0.0.3:6443;
        server 10.0.0.8:6443;
    }
    server {
                listen 6443;
                proxy_pass k8s-apiserver;
    }
    }
#keepalived.conf
! Configuration File for keepalived 

global_defs { 
   # 接收邮件地址 
   notification_email { 
     [email protected] 
     [email protected] 
     [email protected] 
   } 
   # 邮件发送地址 
   notification_email_from [email protected]  
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
   router_id NGINX_MASTER 
} 

vrrp_script check_nginx {
    script "/usr/local/nginx/sbin/check_nginx.sh"
}

vrrp_instance VI_1 { 
    state MASTER 
    interface eth0
    virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的 
    priority 100    # 优先级,备服务器设置 90 
    advert_int 1    # 指定VRRP 心跳包通告间隔时间,默认1秒 
    authentication { 
        auth_type PASS      
        auth_pass 1111 
    }  
    virtual_ipaddress { 
        10.0.0.188/24 
    } 
    track_script {
        check_nginx
    } 
}

mkdir /usr/local/nginx/sbin/ -p
vim /usr/local/nginx/sbin/check_nginx.sh

count=$(ps -ef |grep nginx |egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
    /etc/init.d/keepalived stop
fi

chmod +x /usr/local/nginx/sbin/check_nginx.sh
  • 편집 nginx.repo 파일
vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
  • nginx를 설치 서비스
yum install nginx -y
  • 네 앞으로 추가
vim /etc/nginx/nginx.conf
#在第12行下追加以下内容
stream {

   log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    access_log  /var/log/nginx/k8s-access.log  main;

    upstream k8s-apiserver {
        server 192.168.142.129:6443;        #此处为master的ip地址
        server 192.168.142.120:6443;        #此处为master2的ip地址
    }
    server {
                listen 6443;
                proxy_pass k8s-apiserver;
    }
    }

2. 배포 keeplived 서비스

#安装keepalived
yum install keepalived -y

复制前面的keepalived.conf配置文件,覆盖安装后原有的配置文件
cp keepalived.conf /etc/keepalived/keepalived.conf

vim /etc/keepalived/keepalived.conf

script "/etc/nginx/check_nginx.sh"      #18行,目录改为/etc/nginx/,脚本后写
interface ens33     #23行,eth0改为ens33,此处的网卡名称可以使用ifconfig命令查询
virtual_router_id 51        #24行,vrrp路由ID实例,每个实例是唯一的
priority 100            #25行,优先级,备服务器设置90
virtual_ipaddress {     #31行,
192.168.142.20/24   #32行,vip地址改为之前设定好的192.168.142.20
#38行以下全部删除

vim /etc/nginx/check_nginx.sh
#统计数量       
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")    #统计数量
#匹配为0,关闭keepalived服务
if [ "$count" -eq 0 ];then
    systemctl stop keepalived
fi

chmod +x /etc/nginx/check_nginx.sh

#启动服务
systemctl start keepalived
  • 보기 주소 정보
ip a
# lbm地址信息

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:eb:11:2a brd ff:ff:ff:ff:ff:ff
    inet 192.168.142.140/24 brd 192.168.142.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.142.20/24 scope global secondary ens33  //漂移地址在lb01中
       valid_lft forever preferred_lft forever
    inet6 fe80::53ba:daab:3e22:e711/64 scope link 
       valid_lft forever preferred_lft forever

#lbb地址信息

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:c9:9d:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.142.150/24 brd 192.168.142.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::55c0:6788:9feb:550d/64 scope link 
       valid_lft forever preferred_lft forever
  • 주소 확인 드리프트
#停止lbm端的nginx服务
pkill nginx

#查看服务状态
systemctl status nginx
systemctl status keepalived.service

#此时判断条件若为0,keepalived服务则是停止的
ps -ef |grep nginx |egrep -cv "grep|$$"
  • 보기 주소 정보
ip a
# lbm地址信息

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:eb:11:2a brd ff:ff:ff:ff:ff:ff
    inet 192.168.142.140/24 brd 192.168.142.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::53ba:daab:3e22:e711/64 scope link 
       valid_lft forever preferred_lft forever

#lbb地址信息

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:c9:9d:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.142.150/24 brd 192.168.142.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.142.20/24 scope global secondary ens33  //漂移地址在lb01中
       valid_lft forever preferred_lft forever
    inet6 fe80::55c0:6788:9feb:550d/64 scope link 
       valid_lft forever preferred_lft forever
  • 복구 작업
#在lbm端启动nginx和keepalived服务
systemctl start nginx
systemctl start keepalived
  • 드리프트 반환 주소 LBM 끝
ip a
# lbm地址信息

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:eb:11:2a brd ff:ff:ff:ff:ff:ff
    inet 192.168.142.140/24 brd 192.168.142.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.142.20/24 scope global secondary ens33  //漂移地址在lb01中
       valid_lft forever preferred_lft forever
    inet6 fe80::53ba:daab:3e22:e711/64 scope link 
       valid_lft forever preferred_lft forever

세 개의 노드 노드 구성 파일 수정 화합 VIP (bootstrap.kubeconfig, kubelet.kubeconfig)

cd /opt/kubernetes/cfg/
#配置文件统一修改为VIP
vim /opt/kubernetes/cfg/bootstrap.kubeconfig

server: https://192.168.142.20:6443     
#第5行改为Vip的地址

vim /opt/kubernetes/cfg/kubelet.kubeconfig
server: https://192.168.142.20:6443 
#第5行改为Vip的地址

vim /opt/kubernetes/cfg/kube-proxy.kubeconfig
server: https://192.168.142.20:6443     
#第5行改为Vip的地址
  • 자체 테스트 교체를 완료 한 후
grep 20 *
bootstrap.kubeconfig:    server: https://192.168.142.20:6443
kubelet.kubeconfig:    server: https://192.168.142.20:6443
kube-proxy.kubeconfig:    server: https://192.168.142.20:6443
  • 보기 LB01 K8S에 로그인 Nginx에
tail /var/log/nginx/k8s-access.log
192.168.142.140 192.168.142.129:6443 - [08/Feb/2020:19:20:40 +0800] 200 1119
192.168.142.140 192.168.142.120:6443 - [08/Feb/2020:19:20:40 +0800] 200 1119
192.168.142.150 192.168.142.129:6443 - [08/Feb/2020:19:20:44 +0800] 200 1120
192.168.142.150 192.168.142.120:6443 - [08/Feb/2020:19:20:44 +0800] 200 1120

넷째는 포드를 만들

  • 테스트 창조 포드
kubectl run nginx --image=nginx
  • 상태보기
kubectl get pods
  • 익명 사용자 주어진 관리자 권한 클러스터 바인딩 (문제가 해결 될 수없는 로그를 참조)
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
  • 보기 포드 네트워크
kubectl get pods -o wid

다섯째, UI의 디스플레이 인터페이스를 만들

  • MASTER1의 dashborad에 작업 디렉토리 만들기
mkdir /k8s/dashboard

cd /k8s/dashboard
#上传官方的文件到该目录中
  • 페이지 만들기, 순서에주의
#授权访问api
kubectl create -f dashboard-rbac.yaml

#进行加密
kubectl create -f dashboard-secret.yaml

#配置应用
kubectl create -f dashboard-configmap.yaml

#控制器
kubectl create -f dashboard-controller.yaml

#发布出去进行访问
kubectl create -f dashboard-service.yaml
  • 지정된 KUBE 시스템 네임 스페이스에서 만든보기를 완료 한 후
kubectl get pods -n kube-system
  • 액세스하는 방법을 참조하십시오
kubectl get pods,svc -n kube-system
  • 브라우저가 액세스 할 수에 nodeIP 주소를 입력합니다 (문제 솔루션에 액세스 할 수 없습니다 구글 브라우저)

1. 자체 서명 된 마스터 측 운영에 인증서를 쓰기

vim dashboard-cert.sh

cat > dashboard-csr.json <<EOF
{
   "CN": "Dashboard",
   "hosts": [],
   "key": {
       "algo": "rsa",
       "size": 2048
   },
   "names": [
       {
           "C": "CN",
           "L": "NanJing",
           "ST": "NanJing"
       }
   ]
}
EOF

K8S_CA=$1
cfssl gencert -ca=$K8S_CA/ca.pem -ca-key=$K8S_CA/ca-key.pem -config=$K8S_CA/ca-config.json -profile=kubernetes dashboard-csr.json | cfssljson -bare dashboard
kubectl delete secret kubernetes-dashboard-certs -n kube-system
kubectl create secret generic kubernetes-dashboard-certs --from-file=./ -n kube-system

2. 다시 적용 자체 서명 인증서

bash dashboard-cert.sh /root/k8s/apiserver/

파일 YAML을 수정합니다

vim dashboard-controller.yaml
#在47行下追加以下内容
          - --tls-key-file=dashboard-key.pem
          - --tls-cert-file=dashboard.pem

4. 다시 배포

kubectl apply -f dashboard-controller.yaml

로그온 토큰 생성

  • 토큰을 생성
kubectl create -f k8s-admin.yaml
  • 토큰이 저장됩니다
kubectl get secret -n kube-system
NAME                               TYPE                                  DATA   AGE
dashboard-admin-token-drs7c        kubernetes.io/service-account-token   3      60s
default-token-mmvcg                kubernetes.io/service-account-token   3      55m
kubernetes-dashboard-certs         Opaque                                10     10m
kubernetes-dashboard-key-holder    Opaque                                2      23m
kubernetes-dashboard-token-crqvs   kubernetes.io/service-account-token   3      23m
  • 보기 토큰
kubectl describe secret dashboard-admin-token-drs7c -n kube-system

토큰 6. 복사 및 붙여 넣기는 UI 인터페이스 로그인

그림 삽입 설명 여기

그림 삽입 설명 여기

읽어 주셔서 감사합니다!

추천

출처blog.51cto.com/14449521/2469945