KUBE-apiserver의는 Kubernetes v1.14.0 클러스터 구축

KUBE-apiserver 클러스터 준비를

1 KUBE-apiserver 서버 구성

외국의 IP 네트워크 IP CPU 기억 하드 디스크
192.168.3.10 172.172.1.1 (64) 256 1T
192.168.3.11 172.172.1.2 (64) 256 1T
192.168.3.12 172.172.1.3 (64) 256 1T
192.168.3.13 172.172.1.4 (64) 256 1T
192.168.3.14 172.172.1.5 (64) 256 1T

준비가 진 2, KUBE-apiserver

CD / 앱 / 작업 / K8S
에서 mkdir는 Kubernetes / 서버 {,} 노드
CD는 Kubernetes / 서버
wget을 https://dl.k8s.io/v1.14.0/kubernetes-server-linux-amd64.tar.gz
타르 -xvf kubernetes- amd64.tar.gz - 리눅스 서버
CD는 Kubernetes / 서버
에서 mkdir -p conf의 구성 로그의 SSL
CD 빈은
rm -rf *.docker_tag
rm -rf *.tar
모든 바이너리를 남겨

3, KUBE-apiserver 인증서 준비

3.1 KUBE-apiserver CA 인증서 구성 만들기

에서 mkdir -p / 응용 프로그램 / 일 / K8S / cfssl / K8S
고양이 << EOF | 티 /apps/work/k8s/cfssl/k8s/k8s-ca-csr.json
{
"CN": "는 Kubernetes",
"키": {
"너 한테": "RSA",
"크기"2048
},
"이름 "[
{
"C ":"CN ",
"ST ":"광동 ",
"L ":"광저우 ",
"O ""niuke ",
"OU ":"niuke "
}
]
}
EOF

는 Kubernetes의 CA 인증서 및 개인 키 생성

에서 mkdir -p / 응용 프로그램 / 일 / cfssl / PKI / K8S /
cfssl gencert -initca /apps/work/k8s/cfssl/k8s/k8s-ca-csr.json | \
cfssljson 풀린 / 응용 프로그램 / 일 / K8S / cfssl / PKI / K8S / K8S-CA

3.2는 Kubernetes의 API 서버 인증서 프로파일 작성 (IP 제쳐두고 노드의 다섯 개 가지 큰 클러스터 설정 10 개 노드의 총 증가)

수출 K8S_APISERVER_VIP = \ "
\"192.168.3.10 \ ", \
\"192.168.3.11 \ ", \
\"192.168.3.12 \ ", \
\"192.168.3.13 \ ", \
\"192.168.3.14 \ ", \
\ "192.168.3.15 \", \
\ "192.168.3.16 \", \
\ "192.168.3.17 \", \
\ "192.168.3.18 \", \
\ "192.168.3.19 \", \
\ "192.168.31.252 \ ", \
\"192.168.31.253 \ ", \
\"172.172.1.1의 \ ", \
\"172.172.1.2의 \ "을 \
\"172.172.1.3의 \ "을 \
\"172.172.1.4의 \ ", \
\ "172.172.1.5의 \", \
\ "172.172.1.6의 \", \
\ "172.172.1.7의 \", \
\ "172.172.1.8의 \",\
\ "172.172.1.9의 \", \
\ "172.172.1.10 \", \
"&& \
수출 K8S_APISERVER_SERVICE_CLUSTER_IP ="10.64.0.1 "&& \
수출 K8S_APISERVER_HOSTNAME = "api.k8s.niuke.local"&& \
수출 K8S_CLUSTER_DOMAIN_SHORTNAME = "niuke"&& \
수출 K8S_CLUSTER_DOMAIN_FULLNAME = "niuke.local"&& \의
고양이 << EOF | 티 /apps/work/k8s/cfssl/k8s/k8s_apiserver.json
{
"CN": "는 Kubernetes",
"호스트": [
"127.0.0.1",
$ {K8S_APISERVER_VIP}
"$ {K8S_APISERVER_SERVICE_CLUSTER_IP}",
"$ {K8S_APISERVER_HOSTNAME } ",
"는 Kubernetes ",
"kubernetes.default ",
"kubernetes.default.svc ",
"kubernetes.default.svc. $ {K8S_CLUSTER_DOMAIN_SHORTNAME} ",
"kubernetes.default.svc.






{
"C": "CN",
"ST": "광동",
"L": "광저우",
"O" "niuke",
"OU": "niuke"
}
]
}
EOF

는 Kubernetes API 서버 인증서와 개인 키를 생성

cfssl gencert \
-ca = / 응용 프로그램 / 일 / K8S / cfssl / PKI / K8S / K8S-ca.pem \
-ca 키 = / 응용 프로그램 / 일 / K8S / cfssl / PKI / K8S / K8S-CA-key.pem \
-config = / 응용 프로그램 / 일 / K8S / cfssl / CA-config.json \
-profile =는 Kubernetes \
/apps/work/k8s/cfssl/k8s/k8s_apiserver.json | \
cfssljson 풀린 / 응용 프로그램 / 일 / K8S / cfssl / PKI / K8S / k8s_server

3.3 만들기는 Kubernetes은 webhook 인증서 프로파일

cat << EOF | tee /apps/work/k8s/cfssl/k8s/aggregator.json
{
  "CN": "aggregator",
  "hosts": [""], 
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "GuangDong",
      "L": "GuangZhou",
      "O": "niuke",
      "OU": "niuke"
    }
  ]
}
EOF

##### 生成 Kubernetes webhook 证书和私钥
cfssl gencert \
    -ca=/apps/work/k8s/cfssl/pki/k8s/k8s-ca.pem \
    -ca-key=/apps/work/k8s/cfssl/pki/k8s/k8s-ca-key.pem \
    -config=/apps/work/k8s/cfssl/ca-config.json \
    -profile=kubernetes \
    /apps/work/k8s/cfssl/k8s/aggregator.json | \
    cfssljson -bare /apps/work/k8s/cfssl/pki/k8s/aggregator

배포 디렉토리에 3.4 CP 인증서

cd /apps/work/k8s/kubernetes/server
cp -pdr /apps/work/k8s/cfssl/pki/k8s ssl/k8s
mkdir -p ssl/etcd
cp -pdr /apps/work/k8s/cfssl/pki/etcd/{etcd-ca.pem,etcd_client-key.pem,etcd_client.pem} ssl/etcd

4. 기준 노드의 단지 하나의 다른 일례를 작성 KUBE-apiserver 시작 구성 파일을 작성

4.1 암호화 config.yaml 세대

cd /apps/work/k8s/kubernetes/server/config
export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
cat > encryption-config.yaml <<EOF
kind: EncryptionConfig
apiVersion: v1
resources:
  - resources:
      - secrets
    providers:
      - aescbc:
          keys:
            - name: key1
              secret: ${ENCRYPTION_KEY}
      - identity: {}
EOF

4.2 TLS 부트 스트랩 토큰을 생성 (당신은 또한 후반 기간을 만들 수 있지만,이 토큰입니다)

cd /apps/work/k8s/kubernetes/server/config
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
75045e3b5c47255e0f03922d18dc3bec
vi token.csv
75045e3b5c47255e0f03922d18dc3bec,kubelet-bootstrap,10001,"system:bootstrappers"

4.3 Apiserver 프로필 특별 지침

구성 매개 변수는이 서버 인증서를 수동 물론, 자신의 예약 된 작업 또는 인증서를 발급하는 가젯을 작성할 수 있습니다, 인증서 서버가 자동으로 실행되지 서명해야합니다 생성 kubelet 경우 생산 환경의 4.3.1 kubelet - 인증서 권한 구성 매개 변수를 권장
4.3.2 목표 RAM-MB 파라미터 참조 노드 (60 개) node_nums의 노드 (60) 문서는 노드 2000 2000 * 60 = 000 개의 120 메가 비트의 메모리 사이즈

2000 노드가 배치 4.3.3 최대-요청 - 기내 매개 변수에 대한 1500 최대-요청 - 기내 = 1500 노드 3000가 큰 것보다 최대-요청 - 기내 = 3000

4.3.4 최대 - 돌연변이 - 요청 - 기내 배치 500-1000 변수 노드 2000 1000 이상 3000 사이에 배치

유일한 실제 환경은 이러한 기준을 조정

4.4 Apiserver 프로필

cd /apps/work/k8s/kubernetes/server/conf
vi kube-apiserver
KUBE_APISERVER_OPTS="--logtostderr=false \
        --bind-address=192.168.3.10 \
        --advertise-address=192.168.3.10 \
        --secure-port=5443 \
        --insecure-port=0 \
        --service-cluster-ip-range=10.64.0.0/16 \
        --service-node-port-range=30000-65000 \
        --etcd-cafile=/apps/kubernetes/ssl/etcd/etcd-ca.pem \
        --etcd-certfile=/apps/kubernetes/ssl/etcd/etcd_client.pem \
        --etcd-keyfile=/apps/kubernetes/ssl/etcd/etcd_client-key.pem \
        --etcd-prefix=/registry \
        --etcd-servers=https://172.172.0.1:2379,https://172.172.0.2:2379,https://172.172.0.3:2379 \
        --etcd-servers-overrides=/events#https://172.172.0.4:2379;https://1172.172.0.5:2379;https://172.172.0.6:2379 \
        --client-ca-file=/apps/kubernetes/ssl/k8s/k8s-ca.pem \
        --tls-cert-file=/apps/kubernetes/ssl/k8s/k8s_server.pem \
        --tls-private-key-file=/apps/kubernetes/ssl/k8s/k8s_server-key.pem \
        --kubelet-certificate-authority=/apps/kubernetes/ssl/k8s/k8s-ca.pem \       
        --kubelet-client-certificate=/apps/kubernetes/ssl/k8s/k8s_server.pem \
        --kubelet-client-key=/apps/kubernetes/ssl/k8s/k8s_server-key.pem \
        --service-account-key-file=/apps/kubernetes/ssl/k8s/k8s-ca.pem \
        --requestheader-client-ca-file=/apps/kubernetes/ssl/k8s/k8s-ca.pem \
        --proxy-client-cert-file=/apps/kubernetes/ssl/k8s/aggregator.pem \
        --proxy-client-key-file=/apps/kubernetes/ssl/k8s/aggregator-key.pem \
        --requestheader-allowed-names=aggregator \
        --requestheader-group-headers=X-Remote-Group \
        --requestheader-extra-headers-prefix=X-Remote-Extra- \
        --requestheader-username-headers=X-Remote-User \
        --enable-aggregator-routing=true \
        --anonymous-auth=false \
        --experimental-encryption-provider-config=/apps/kubernetes/config/encryption-config.yaml \
        --enable-admission-plugins=AlwaysPullImages,DefaultStorageClass,DefaultTolerationSeconds,LimitRanger,NamespaceExists,NamespaceLifecycle,NodeRestriction,OwnerReferencesPermissionEnforcement,PodNodeSelector,PersistentVolumeClaimResize,PodPreset,PodTolerationRestriction,ResourceQuota,ServiceAccount,StorageObjectInUseProtection MutatingAdmissionWebhook ValidatingAdmissionWebhook \
        --disable-admission-plugins=DenyEscalatingExec,ExtendedResourceToleration,ImagePolicyWebhook,LimitPodHardAntiAffinityTopology,NamespaceAutoProvision,Priority,EventRateLimit,PodSecurityPolicy \
        --cors-allowed-origins=.* \
        --enable-swagger-ui \
        --runtime-config=api/all=true \
        --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname \
        --authorization-mode=Node,RBAC \
        --allow-privileged=true \
        --apiserver-count=3 \
        --audit-log-maxage=30 \
        --audit-log-maxbackup=3 \
        --audit-log-maxsize=100 \
        --kubelet-https \
        --event-ttl=1h \
        --feature-gates=RotateKubeletServerCertificate=true,RotateKubeletClientCertificate=true \
        --enable-bootstrap-token-auth=true \
        --token-auth-file=/apps/kubernetes/config/token.csv \
        --audit-log-path=/apps/kubernetes/log/api-server-audit.log \
        --alsologtostderr=true \
        --log-dir=/apps/kubernetes/log \
        --v=2 \
        --endpoint-reconciler-type=lease \
        --max-mutating-requests-inflight=600 \
        --max-requests-inflight=1600 \
        --target-ram-mb=120000"

4.5 apiserver systemd 파일 만들기

cd /apps/work/k8s/kubernetes
vi kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes

[Service]
Type=notify
LimitNOFILE=1024000
LimitNPROC=1024000
LimitCORE=infinity
LimitMEMLOCK=infinity

EnvironmentFile=-/apps/kubernetes/conf/kube-apiserver
ExecStart=/apps/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS
Restart=on-failure
RestartSec=5
User=k8s 
[Install]
WantedBy=multi-user.target

4.6 배포 ansibe 호스트를 만들 수 있습니다

CD / 애플리케이션 / 작업 / K8S /는 Kubernetes /
또는 호스트
[마스터]
192.168.3.10
192.168.3.11
192.168.3.12
192.168.3.13
192.168.3.14

4.7 계정 K8S을 실행하는 원격 서비스 만들기

ansible -i host master -m shell -a "useradd k8s -s /sbin/nologin -M"

4.8 원격 디렉토리를 생성

ansible -i host master -m shell -a "mkdir -p /apps/kubernetes/kubelet-plugins/volume"

문서의 4.9 유통

ansible -i host master -m copy -a "src=server/ dest=/apps/kubernetes/"

계정을 실행하도록 설정 4.10

ansible -i host master -m shell -a "chown -R k8s:root /apps/kubernetes"

4.11 바이너리에 대한 권한을 실행할 수 있습니다

ansible -i host master -m shell -a "chmod u+x /apps/kubernetes/bin/*"

4.12 분배 KUBE-apiserver.service

ansible -i host master -m copy -a "src=kube-apiserver.service dest=/usr/lib/systemd/system/kube-apiserver.service"

해당 서버 IP를 수정하는 수정 된 원격 서버에 액세스 --bind 4.13 주소 = 192.168.3.10 \ --advertise 주소 = 192.168.3.10 \

5, KUBE-apiserver 시작

ansible -i 호스트 마스터 -m 쉘 -a "systemctl 데몬이-다시로드"
"KUBE-apiserver 수 systemctl"ansible -i 호스트 마스터 -m 쉘 -a를
-a "KUBE-apiserver을 시작 systemctl"쉘 -m ansible -i 호스트 마스터
ansible -i 호스트 마스터 -m 쉘 -a "systemctl 상태 KUBE-apiserver"

도 6에서, 서버 설치 마스터의 VIP K8S-VIP-01 / K8S-VIP-02의 작동

6.1 설명 : 자원의 합리적 사용에 대한 도메인 이름의 사용에 두 마스터 VIP 액세스 많은 압력되지 않습니다 귀빈이 네트워크를 추가 할 수 없습니다 성숙한 DNS + 장애 감지가없는 경우, 단어의 사용은 백엔드 서버 포트에 VIP 압력을 VIP 제한된 수의 노드가 더 포트 상황의 순 손실을 생산합니다

6.2 설치 및 CPU 리소스를 소비하는 서버 구성 VIP 8 코어 16g의 haproxy 많은 시간을 배포 haproxy

6.2.1 다운로드 haproxy
mkdir -p /apps/work/k8s/haproxy
cd  /apps/work/k8s/haproxy
wget https://www.haproxy.org/download/1.9/src/haproxy-1.9.8.tar.gz
6.2.2 빌드 의존성이 haproxy 설치
yum -y install epel-release
 yum install -y git patch gcc gcc-c++ \
 readline-devel zlib-devel libffi-devel \
 openssl openssl-devel make autoconf \
 libtool bison libxml2 libxml2-devel libxslt-devel \
 libyaml-devel python python-docutils cmake imake \
 expat-devel libaio libaio-devel bzr ncurses-devel wget \
 libjpeg libjpeg-devel libpng libpng-devel freetype \
 freetype-devel pcre-devel curl-devel libmcrypt \
 libmcrypt-devel libunwind libunwind-devel rsyslog
6.2.3 설치 jemalloc
git clone https://github.com/jemalloc/jemalloc.git
cd jemalloc
./autogen.sh 
./configure 
make -j$(nproc) 
make -j$(nproc) install_bin install_include install_lib
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig
ln -sf /usr/local/lib/libjemalloc.so /usr/lib/ 
ln -sf /usr/local/lib/libjemalloc.so /usr/lib64/ 
yum -y install  systemd-devel
6.3.4 설치 haproxy
useradd  haproxy -s /sbin/nologin -M
cd  ../
tar -xvf haproxy-1.9.8.tar.gz
cd haproxy-1.9.8
make CPU="generic" TARGET="linux2628" USE_SYSTEMD=1 USE_PCRE=1 USE_PCRE_JIT=1  USE_OPENSSL=1 USE_ZLIB=1 USE_REGPARM=1  USE_LINUX_TPROXY=1 ADDLIB="-ljemalloc"  DEFINE=-DTCP_USER_TIMEOUT=18 PREFIX=/apps/haproxy
make install PREFIX=/apps/haproxy
 mkdir -pv /apps/haproxy/{conf,run,log} 
6.3.5 구성 haproxy
cd /app/haproxy/conf
vim haproxy.conf
global  
                maxconn 100000  
                chroot /apps/haproxy
                user haproxy

                group haproxy 

                daemon  
                pidfile /apps/haproxy/run/haproxy.pid  
                #debug  
                #quiet 
                stats socket /apps/haproxy/run/haproxy.sock mode 600 level admin
                log             127.0.0.1 local2 

                nbproc 8
                cpu-map 1 0
                cpu-map 2 1
                cpu-map 3 2
                cpu-map 4 3
                cpu-map 5 4
                cpu-map 6 5
                cpu-map 7 6
                cpu-map 8 7
                stats bind-process 8

defaults  
                log     global
                mode    tcp
                option  tcplog
                option  dontlognull
                option  redispatch  
                retries 3 
                maxconn 100000
                timeout connect     30000 
                timeout client      50000  
                timeout server 50000  

resolvers  dns1
        nameserver dns1  114.114.114.114:53
        nameserver dns2  8.8.8.8:53
        resolve_retries 3
        timeout resolve 10s
        timeout retry 10s
        hold other 30s
        hold refused 30s
        hold nx 30s
        hold timeout 30s
        hold valid 10s
        hold obsolete 30s

listen admin_stat  
        # 监听端口  
        bind 0.0.0.0:57590 
        # http的7层模式  
        mode http  
        #log global  
        # 统计页面自动刷新时间  
        stats refresh 30s  
        # 统计页面URL  
        stats uri /admin?stats  
        # 统计页面密码框上提示文本  
        stats realm Haproxy\ Statistics  
        # 统计页面用户名和密码设置  
        stats auth admin:123456admin
        # 隐藏统计页面上HAProxy的版本信息  
        #stats hide-version  
        stats enable
frontend kube-apiserver-https
  mode tcp
  bind :6443
  default_backend kube-apiserver-backend
backend kube-apiserver-backend
  mode tcp
  server 192.168.3.10-api 192.168.3.10:5443 check
  server 192.168.3.11-api 192.168.3.11:5443 check
  server 192.168.3.12-api 192.168.3.12:5443 check
  server 192.168.3.13-api 192.168.3.13:5443 check
  server 192.168.3.14-api 192.168.3.14:5443 check
6.3.6 로그 분할 logrotate에를 만들
vim /etc/logrotate.d/haproxy
/apps/haproxy/log/*.log {
    rotate 14
    daily
    missingok
    compress
    dateext
    size 50M
    notifempty
    copytruncate
}
haproxy 로그 수집 만들기 6.3.7
vim /etc/rsyslog.d/49-haproxy.conf
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514

$template HAProxy,"%syslogtag%%msg:::drop-last-lf%\n"
$template TraditionalFormatWithPRI,"%pri-text%: %timegenerated% %syslogtag%%msg:::drop-last-lf%\n"

local2.=info     /apps/haproxy/log/access.log;HAProxy
local2.=notice;local2.=warning   /apps/haproxy/log/status.log;TraditionalFormatWithPRI
local2.error   /apps/haproxy/log/error.log;TraditionalFormatWithPRI
local2.* stop
6.3.8 시작 파일 haproxy 만들기
vim  /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
Documentation=man:haproxy(1)
After=syslog.target network.target

[Service]
LimitCORE=infinity
LimitNOFILE=1024000
LimitNPROC=1024000
EnvironmentFile=-/etc/sysconfig/haproxy
Environment="CONFIG=/apps/haproxy/conf/haproxy.conf" "PIDFILE=/apps/haproxy/run/haproxy.pid"
ExecStartPre=/apps/haproxy/sbin/haproxy -f $CONFIG -c -q
ExecStart=/apps/haproxy/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE
ExecReload=/apps/haproxy/sbin/haproxy -f $CONFIG -c -q
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=mixed
Restart=always
Type=notify

[Install]
WantedBy=multi-user.target
6.3.9 시작 haproxy
systemctl start haproxy
systemctl enable  haproxy
http://192.168.4.1:57590/admin?stats 
账号密码:admin:123456admin
6.3.10 설명

제 2 기준의 최초 설치
haproxy 지원 백엔드 부하 영역
모두가 외부 라우팅

7, Keepalived 설치

7.1 Keepalived 다운로드

    mkdir -p /apps/work/k8s/keepalived
    cd /apps/work/k8s/keepalived
wget https://www.keepalived.org/software/keepalived-2.0.16.tar.gz
wget https://ftp.gnu.org/gnu/automake/automake-1.15.1.tar.gz

7.2 Keepalived 설치를 의존

yum install -y libnl-devel openssl-devel libnfnetlink-devel ipvsadm popt-devel libnfnetlink kernel-devel 

7.3 Keepalived 설치

tar -xvf automake-1.15.1.tar.gz
cd  automake-1.15.1
./configure 
make 
make install
cd ../
tar -xvf keepalived-2.0.16.tar.gz
cd  keepalived-2.0.16
automake --add-missing 
automake
./configure --prefix=/apps/keepalived
 make
 make install

7.4 서비스를 시작 Keepalived

 vim keepalived/keepalived.service
 [Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target 
Wants=network-online.target 

[Service]
Type=forking
LimitNOFILE=1024000
LimitNPROC=1024000
LimitCORE=infinity
LimitMEMLOCK=infinity
PIDFile=/var/run/keepalived.pid
KillMode=process
EnvironmentFile=-/apps/keepalived/etc/sysconfig/keepalived
ExecStart=/apps/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

cp -pdr keepalived/keepalived.service /usr/lib/systemd/system

7.5 Keepalived 구성 변경

cd /apps/keepalived/etc/sysconfig
vim keepalived
KEEPALIVED_OPTIONS="-D \
                                           --use-file=/apps/keepalived/etc/keepalived/keepalived.conf"

7.6Keepalived 마스터 配置

生成 auth_pass
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
99ce6e3381dc326633737ddaf5d904d2
cd /apps/keepalived/etc/keepalived
vim keepalived.conf
! Configuration File for keepalived

global_defs {
 router_id LVS_DEVEL
}

vrrp_script check_haproxy {
  script "killall -0 haproxy"
  interval 3
  weight -2
  fall 10
  rise 2
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 250
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass  99ce6e3381dc326633737ddaf5d904d2
  }
  virtual_ipaddress {
    192.168.31.252/19
  }
  track_script {
    check_haproxy
  }
}

7.7Keepalived 백업 구성

 ! Configuration File for keepalived

global_defs {
 router_id LVS_DEVEL
}

vrrp_script check_haproxy {
  script "killall -0 haproxy"
  interval 3
  weight -2
  fall 10
  rise 2
}

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 249
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 99ce6e3381dc326633737ddaf5d904d2
  }
  virtual_ipaddress {
    192.168.31.252/19
  }
  track_script {
    check_haproxy
  }
}
7.8 시작 keepalived

keepalived.service 수 있도록 systemctl
keepalived.service 시작 systemctl
systemctl 상태 keepalived.service
IP 주소 쇼 eth0를을

8 생성, 관리 관리자 자격 증명 K8S 조작 노드 작업

cat << EOF | tee /apps/work/k8s/cfssl/k8s/k8s_apiserver_admin.json
{
  "CN": "admin",
  "hosts": [""], 
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "GuangDong",
      "L": "GuangZhou",
      "O": "system:masters",
      "OU": "Kubernetes-manual"
    }
  ]
}
EOF

cfssl gencert -ca=/apps/work/k8s/cfssl/pki/k8s/k8s-ca.pem \
    -ca-key=/apps/work/k8s/cfssl/pki/k8s/k8s-ca-key.pem \
    -config=/apps/work/k8s/cfssl/ca-config.json \
    -profile=kubernetes \
        /apps/work/k8s/cfssl/k8s/k8s_apiserver_admin.json | \
        cfssljson -bare /apps/work/k8s/cfssl/pki/k8s/k8s_apiserver_admin

9 생성, 관리 관리자는 admin.kubeconfig를 기록

     cd /apps/k8s/
 编辑hosts
 vim /etc/hosts
 192.168.31.252 api.k8s.niuke.local
export KUBE_APISERVER="https://api.k8s.niuke.local:6443"
kubectl config set-cluster kubernetes \
--certificate-authority=/apps/work/k8s/cfssl/pki/k8s/k8s-ca.pem \
--embed-certs=true  \
--server=${KUBE_APISERVER} \
--kubeconfig=admin.kubeconfig

 kubectl config set-credentials admin \
 --client-certificate=/apps/work/k8s/cfssl/pki/k8s/k8s_apiserver_admin.pem \
 --client-key=/apps/work/k8s/cfssl/pki/k8s/k8s_apiserver_admin-key.pem \
 --embed-certs=true \
 --kubeconfig=admin.kubeconfig

kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=admin \
--namespace=kube-system \
--kubeconfig=admin.kubeconfig
kubectl config use-context kubernetes --kubeconfig=admin.kubeconfig
cp admin.kubeconfig ~/.kube/config

클러스터가 제대로 작동하는지 KUBE-apiserver 확인

 kubectl cluster-info 
 [root@jenkins tasks]#  kubectl cluster-info 
Kubernetes master is running at https://api.k8s.niuke.local:6443

kubectl get cs
[root@jenkins tasks]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Unhealthy     Get http://127.0.0.1:10251/healthz: net/http: HTTP/1.x             
controller-manager   Unhealthy  Get http://127.0.0.1:10252/healthz: net/http: HTTP/1.x            
etcd-2               Healthy   {"health":"true"}   
etcd-3               Healthy   {"health":"true"}   
etcd-1               Healthy   {"health":"true"}   
etcd-0               Healthy   {"health":"true"}   
etcd-5               Healthy   {"health":"true"}   
etcd-4               Healthy   {"health":"true"}  

설명 : 지금 여기 우리가 그들의 필요에 따라 추가 도메인 이름에서 주요 액세스를 구성 할 수 있습니다 자신을 구성 할 수 있습니다 keepalived 더블 마스터 수정합니다. 는 Kubernetes API 서버 인증서를 생성 할 때 api.k8s.niuke.local 여기에 도메인 이름을 사용하여 도메인 이름을 지정주십시오

다음 :는 Kubernetes 생산 설치가 kube_scheduler 클러스터는 Kubernetes의 v1.14.0의 배치에 따라 배포하려면

추천

출처blog.51cto.com/juestnow/2404297