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의 배치에 따라 배포하려면