二进制安装k8s(单master节点)
- 一、二进制基本配置
- 1、配置master节点hosts文件(master节点)
- 2、CentOS 7 安装 yum源(所有节点)
- 3、安装必备工具(所有节点)
- 4、关闭防火墙等配置(所有节点)
- 5、安装 ntpdate(所有节点)
- 6、同步时间(所有节点)
- 7、配置limit(所有节点)
- 8、免密登录(master节点)
- 二、二进制系统和内核升级及基本组件安装
- 1、升级系统(所有节点)
- 2、升级内核(master节点)
- 3、二进制基本组件安装
- 4、安装docker(所有节点)
- 5、下载kubernetes安装包(master节点)
- 6、下载安装源码文件(master节点)
- 三、二进制生成证书详情
- 1、master 下载证书(master节点)
- 2、生成etcd证书(master节点)
- 3、k8s组件证书(master节点)
- 4、Etcd配置(master节点)
- 5、创建etcd service并启动(master节点)
- 6、创建etcd的证书目录并启动(master节点)
- 四、二进制K8s组件配置
- 1、创建相关目录(所有节点)
- 2、Apiserver(master节点)
- 3、开启kube-apiserver(master节点)
- 4、配置kube-controller-manager service(master节点)
- 5、启动kube-controller-manager(master节点)
- 6、配置kube-scheduler service(master节点)
- 6、启动kube-scheduler service(master节点)
- 五、二进制使用Bootstrapping自动颁发证书
- 1、创建bootstrap(master节点)
- 2、创建 bootstrap(master节点)
- 六、二进制Node节点及Calico配置
- 1、复制证书(master节点)
- 2、Kubelet配置(所有节点)
- 3、启动kubelet(所有节点)
- 4、kube-proxy配置(master节点)
- 5、启动(所有节点)
- 6、Calico配置(master节点)
- 七、二进制CoreDNS&Metrics
- 1、安装CoreDNS(master节点)
- 2、安装Metrics Server
- 八、生产环境k8s集群关键性配置
- 1、docker配置 (所有节点)
- 2、更新配置(所有节点)
- 3、controller-manager配置(master节点)
- 4、kubelet配置(所有节点)
- 5、添加参数
一、二进制基本配置
1、配置master节点hosts文件(master节点)
echo "
172.16.55.150 pro-k8s-master
172.16.55.151 pro-k8s-node01
172.16.55.152 pro-k8s-node02
172.16.55.153 pro-k8s-node03
">> /etc/hosts
2、CentOS 7 安装 yum源(所有节点)
curl -o /etc// /repo/
yum-config-manager --add-repo /docker-ce/linux/centos/
sed -i -e '//d' -e '//d' /etc//
3、安装必备工具(所有节点)
yum install wget jp psmisc vim net-tools telent yum-utils device-mapper-persistent-data lvm2 git -y
4、关闭防火墙等配置(所有节点)
systemctl disable --now firewalld
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
swapoff -a && sysctl -w =0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
5、安装 ntpdate(所有节点)
rpm -ivh /centos/
yum install ntpdate -y
6、同步时间(所有节点)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' > /etc/timezone
ntpdate
crontab -e
*/5 * * * * ntpdate
7、配置limit(所有节点)
ulimit -SHn 65535
echo "
> * soft nofile 655360
> * hard nofile 131072
> * soft nproc 655350
> * hard nproc 655350
> * soft memlock unlimited
> * hard memlock unlimited
> ">> /etc/security/
8、免密登录(master节点)
ssh-keygen -t rsa
for i in pro-k8s-master pro-k8s-node01 pro-k8s-node02 pro-k8s-node03;do ssh-copy-id -i .ssh/id_rsa.pub $i;done
二、二进制系统和内核升级及基本组件安装
1、升级系统(所有节点)
yum update kernel kernel-devel kernel-firmware kernel-headers -y
yum update -y --exclude=kernel* && reboot
2、升级内核(master节点)
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1..x86_64.rpm
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1..x86_64.rpm
for i in pro-k8s-node01 pro-k8s-node02 pro-k8s-node03;
do scp kernel-ml-4.19.12-1..x86_64.rpm kernel-ml-devel-4.19.12-1..x86_64.rpm $i:/root/;done
cd /root && yum localinstall -y kernel-ml*
grub2-set-default 0 && grub2-mkconfig -o /etc/
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
grubby --default-kernel
3、二进制基本组件安装
- 安装 ipvsadm(所有节点)
yum install ipvsadm ipset sysstat conntrack libseccomp -y
cat <<EOF > /etc//
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
[root@pro-k8s-master ~]
- 配置k8s内核(所有节点)
cat <<EOF > /etc//
net.ipv4.ip_forward = 1
-nf-call-iptables = 1
-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
.max_user_watches=89100
-max=52706963
fs.nr_open=52706963
.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_timestamps = 0
= 16384
EOF
sysctl --system
reboot
4、安装docker(所有节点)
yum install docker-ce-19.03.* -y
mkdir /etc/docker
cat <<EOF > /etc/docker/
{
"exec-opts": ["=systemd"]
}
EOF
systemctl daemon-reload && systemctl enable --now docker
5、下载kubernetes安装包(master节点)
wget https://dl./v1.23.4/
wget /etcd/v3.4.18/etcd-v3.4.
tar -xf --strip-components=3 -C /usr/local/bin kubernetes/server/bin/kube{let,ctl,-apiserver,-controller-manager,-scheduler,-proxy}
tar -zxvf etcd-v3.4. --strip-components=1 -C /usr/local/bin etcd-v3.4.18-linux-amd64/etcd{,ctl}
kubelet --version
etcdctl version
WorkNodes='pro-k8s-node01 pro-k8s-node02 pro-k8s-node03'
for NODE in $WorkNodes;do scp /usr/local/bin/kube{let,-proxy} $NODE:/usr/local/bin/;done
6、下载安装源码文件(master节点)
git clone /dotbalo/
三、二进制生成证书详情
1、master 下载证书(master节点)
wget "/R1.2/cfssl_linux-amd64" -O /usr/local/bin/cfssl
wget "/R1.2/cfssljson_linux-amd64" -O /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson
mkdir /etc/etcd/ssl -p
mkdir /etc/kubernetes/pki -p
2、生成etcd证书(master节点)
cd /root/k8s-ha-install/pki/
cfssl gencert -initca | cfssljson -bare /etc/etcd/ssl/etcd-ca
cfssl gencert \
-ca=/etc/etcd/ssl/ \
-ca-key=/etc/etcd/ssl/ \
-config= \
-hostname=127.0.0.1,pro-k8s-master,172.16.55.150 \
-profile=kubernetes \
| cfssljson -bare /etc/etcd/ssl/etcd
3、k8s组件证书(master节点)
cd /root/k8s-ha-install/pki
cfssl gencert -initca | cfssljson -bare /etc/kubernetes/pki/ca
cfssl gencert -ca=/etc/kubernetes/pki/ -ca-key=/etc/kubernetes/pki/ -config= -hostname=10.96.0.1,172.16.55.150,127.0.0.1,kubernetes,,,, -profile=kubernetes | cfssljson -bare /etc/kubernetes/pki/apiserver
cfssl gencert -initca | cfssljson -bare /etc/kubernetes/pki/front-proxy-ca
cfssl gencert -ca=/etc/kubernetes/pki/ -ca-key=/etc/kubernetes/pki/ -config= -profile=kubernetes | cfssljson -bare /etc/kubernetes/pki/front-proxy-client
cfssl gencert \
-ca=/etc/kubernetes/pki/ \
-ca-key=/etc/kubernetes/pki/ \
-config= \
-profile=kubernetes \
| cfssljson -bare /etc/kubernetes/pki/controller-manager
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ \
--embed-certs=true \
--server=https://172.16.55.150:6443 \
--kubeconfig=/etc/kubernetes/
kubectl config set-credentials system:kube-controller-manager \
--client-certificate=/etc/kubernetes/pki/ \
--client-key=/etc/kubernetes/pki/ \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/
kubectl config set-context system:kube-controller-manager@kubernetes \
--cluster=kubernetes \
--user=system:kube-controller-manager \
--kubeconfig=/etc/kubernetes/
kubectl config use-context system:kube-controller-manager@kubernetes \
--kubeconfig=/etc/kubernetes/
cfssl gencert \
-ca=/etc/kubernetes/pki/ \
-ca-key=/etc/kubernetes/pki/ \
-config= \
-profile=kubernetes \
| cfssljson -bare /etc/kubernetes/pki/scheduler
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ \
--embed-certs=true \
--server=https://172.16.55.150:6443 \
--kubeconfig=/etc/kubernetes/
kubectl config set-credentials system:kube-scheduler \
--client-certificate=/etc/kubernetes/pki/ \
--client-key=/etc/kubernetes/pki/ \
--embed-certs=true \
--kubeconfig=/etc/kubernetes/
kubectl config set-context system:kube-scheduler@kubernetes \
--cluster=kubernetes \
--user=system:kube-scheduler \
--kubeconfig=/etc/kubernetes/
kubectl config use-context system:kube-scheduler@kubernetes \
--kubeconfig=/etc/kubernetes/
cfssl gencert \
-ca=/etc/kubernetes/pki/ \
-ca-key=/etc/kubernetes/pki/ \
-config= \
-profile=kubernetes \
| cfssljson -bare /etc/kubernetes/pki/admin
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ --embed-certs=true --server=https://172.16.55.150:6443 --kubeconfig=/etc/kubernetes/
kubectl config set-credentials kubernetes-admin --client-certificate=/etc/kubernetes/pki/ --client-key=/etc/kubernetes/pki/ --embed-certs=true --kubeconfig=/etc/kubernetes/
kubectl config set-context kubernetes-admin@kubernetes --cluster=kubernetes --user=kubernetes-admin --kubeconfig=/etc/kubernetes/
kubectl config use-context kubernetes-admin@kubernetes --kubeconfig=/etc/kubernetes/
openssl genrsa -out /etc/kubernetes/pki/ 2048
openssl rsa -in /etc/kubernetes/pki/ -pubout -out /etc/kubernetes/pki/
4、Etcd配置(master节点)
vim /etc/etcd/
name: 'pro-k8s-master'
data-dir: /var/lib/etcd
wal-dir: /var/lib/etcd/wal
snapshot-count: 5000
heartbeat-interval: 100
election-timeout: 1000
quota-backend-bytes: 0
listen-peer-urls: 'https://172.16.55.150:2380'
listen-client-urls: 'https://172.16.55.150:2379,http://127.0.0.1:2379'
max-snapshots: 3
max-wals: 5
cors:
initial-advertise-peer-urls: 'https://172.16.55.150:2380'
advertise-client-urls: 'https://172.16.55.150:2379'
discovery:
discovery-fallback: 'proxy'
discovery-proxy:
discovery-srv:
initial-cluster: 'pro-k8s-master=https://172.16.55.150:2380'
initial-cluster-token: 'etcd-k8s-cluster'
initial-cluster-state: 'new'
strict-reconfig-check: false
enable-v2: true
enable-pprof: true
proxy: 'off'
proxy-failure-wait: 5000
proxy-refresh-interval: 30000
proxy-dial-timeout: 1000
proxy-write-timeout: 5000
proxy-read-timeout: 0
client-transport-security:
cert-file: '/etc/kubernetes/pki/etcd/'
key-file: '/etc/kubernetes/pki/etcd/'
client-cert-auth: true
trusted-ca-file: '/etc/kubernetes/pki/etcd/'
auto-tls: true
peer-transport-security:
cert-file: '/etc/kubernetes/pki/etcd/'
key-file: '/etc/kubernetes/pki/etcd/'
peer-client-cert-auth: true
trusted-ca-file: '/etc/kubernetes/pki/etcd/'
auto-tls: true
debug: false
log-package-levels:
log-outputs: [default]
force-new-cluster: false
5、创建etcd service并启动(master节点)
vim /usr/lib/systemd/system/
[Unit]
Description=Etcd Service
Documentation=/etcd/docs/latest/
After=
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd --config-file=/etc/etcd/
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=
Alias=
6、创建etcd的证书目录并启动(master节点)
mkdir /etc/kubernetes/pki/etcd
ln -s /etc/etcd/ssl/* /etc/kubernetes/pki/etcd/
systemctl daemon-reload&&systemctl enable --now etcd
四、二进制K8s组件配置
1、创建相关目录(所有节点)
mkdir -p /etc/kubernetes/manifests/ /etc/systemd/system/ /var/lib/kubelet /var/log/kubernetes
2、Apiserver(master节点)
vim /usr/lib/systemd/system/
[Unit]
Description=Kubernetes API Server
Documentation=/kubernetes/kubernetes
After=
[Service]
ExecStart=/usr/local/bin/kube-apiserver \
--v=2 \
--logtostderr=true \
--allow-privileged=true \
--bind-address=0.0.0.0 \
--secure-port=6443 \
--insecure-port=0 \
--advertise-address=172.16.55.150 \
--service-cluster-ip-range=10.96.0.0/12 \
--service-node-port-range=30000-32767 \
--etcd-servers=https://172.16.55.150:2379 \
--etcd-cafile=/etc/etcd/ssl/ \
--etcd-certfile=/etc/etcd/ssl/ \
--etcd-keyfile=/etc/etcd/ssl/ \
--client-ca-file=/etc/kubernetes/pki/ \
--tls-cert-file=/etc/kubernetes/pki/ \
--tls-private-key-file=/etc/kubernetes/pki/ \
--kubelet-client-certificate=/etc/kubernetes/pki/ \
--kubelet-client-key=/etc/kubernetes/pki/ \
--service-account-key-file=/etc/kubernetes/pki/ \
--service-account-signing-key-file=/etc/kubernetes/pki/ \
--service-account-issuer= \
--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota \
--authorization-mode=Node,RBAC \
--enable-bootstrap-token-auth=true \
--requestheader-client-ca-file=/etc/kubernetes/pki/ \
--proxy-client-cert-file=/etc/kubernetes/pki/ \
--proxy-client-key-file=/etc/kubernetes/pki/ \
--requestheader-allowed-names=aggregator \
--requestheader-group-headers=X-Remote-Group \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-username-headers=X-Remote-User
Restart=on-failure
RestartSec=10s
LimitNOFILE=65535
[Install]
WantedBy=
3、开启kube-apiserver(master节点)
systemctl daemon-reload && systemctl enable --now kube-apiserver
4、配置kube-controller-manager service(master节点)
vim /usr/lib/systemd/system/
[Unit]
Description=Kubernetes Controller Manager
Documentation=/kubernetes/kubernetes
After=
[Service]
ExecStart=/usr/local/bin/kube-controller-manager \
--v=2 \
--logtostderr=true \
--address=127.0.0.1 \
--root-ca-file=/etc/kubernetes/pki/ \
--cluster-signing-cert-file=/etc/kubernetes/pki/ \
--cluster-signing-key-file=/etc/kubernetes/pki/ \
--service-account-private-key-file=/etc/kubernetes/pki/ \
--kubeconfig=/etc/kubernetes/ \
--leader-elect=true \
--use-service-account-credentials=true \
--node-monitor-grace-period=40s \
--node-monitor-period=5s \
--pod-eviction-timeout=2m0s \
--controllers=*,bootstrapsigner,tokencleaner \
--allocate-node-cidrs=true \
--cluster-cidr=192.168.0.0/12 \
--requestheader-client-ca-file=/etc/kubernetes/pki/ \
--node-cidr-mask-size=24
Restart=always
RestartSec=10s
[Install]
WantedBy=
5、启动kube-controller-manager(master节点)
systemctl daemon-reload&&systemctl enable --now kube-controller-manager
6、配置kube-scheduler service(master节点)
vim /usr/lib/systemd/system/
[Unit]
Description=Kubernetes Scheduler
Documentation=/kubernetes/kubernetes
After=
[Service]
ExecStart=/usr/local/bin/kube-scheduler \
--v=2 \
--logtostderr=true \
--address=127.0.0.1 \
--leader-elect=true \
--kubeconfig=/etc/kubernetes/
Restart=always
RestartSec=10s
[Install]
WantedBy=
6、启动kube-scheduler service(master节点)
systemctl daemon-reload&&systemctl enable --now kube-scheduler
五、二进制使用Bootstrapping自动颁发证书
1、创建bootstrap(master节点)
- 是一个 keepalived 用来向 apiserver 申请证书的文件
- 注意:如果要修改的token-id和token-secret,需要保证 c8ad9c
字符串一致的,并且位数是一样的。还要保证上个命令的黄色字体:c8ad9c.2e4d610cf3e7426e与你修改的字符串要一致
cd /root/k8s-ha-install/bootstrap
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ --embed-certs=true --server=https://172.16.55.150:6443 --kubeconfig=/etc/kubernetes/
kubectl config set-credentials tls-bootstrap-token-user --token=c8ad9c.2e4d610cf3e7426e --kubeconfig=/etc/kubernetes/
kubectl config set-context tls-bootstrap-token-user@kubernetes --cluster=kubernetes --user=tls-bootstrap-token-user --kubeconfig=/etc/kubernetes/
kubectl config use-context tls-bootstrap-token-user@kubernetes --kubeconfig=/etc/kubernetes/
2、创建 bootstrap(master节点)
mkdir -p /root/.kube ; cp /etc/kubernetes/ /root/.kube/config
kubectl create -f
六、二进制Node节点及Calico配置
1、复制证书(master节点)
cd /etc/kubernetes/
for NODE in pro-k8s-node01 pro-k8s-node02 pro-k8s-node03; do
ssh $NODE mkdir -p /etc/kubernetes/pki /etc/etcd/ssl /etc/etcd/ssl
for FILE in ; do
scp /etc/etcd/ssl/$FILE $NODE:/etc/etcd/ssl/
done
for FILE in pki/ pki/ pki/ ; do
scp /etc/kubernetes/$FILE $NODE:/etc/kubernetes/${FILE}
done
done
2、Kubelet配置(所有节点)
mkdir -p /var/lib/kubelet /var/log/kubernetes /etc/systemd/system/ /etc/kubernetes/manifests/
cat> /usr/lib/systemd/system/ <<EOF
[Unit]
Description=Kubernetes Kubelet
Documentation=/kubernetes/kubernetes
After=
Requires=
[Service]
ExecStart=/usr/local/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=
EOF
cat> /etc/systemd/system// <<EOF
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/ --kubeconfig=/etc/kubernetes/"
Environment="KUBELET_SYSTEM_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/ --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_CONFIG_ARGS=--config=/etc/kubernetes/ --pod-infra-container-image=/google_containers/pause-amd64:3.2"
Environment="KUBELET_EXTRA_ARGS=--node-labels=/node='' "
ExecStart=
ExecStart=/usr/local/bin/kubelet \$KUBELET_KUBECONFIG_ARGS \$KUBELET_CONFIG_ARGS \$KUBELET_SYSTEM_ARGS \$KUBELET_EXTRA_ARGS
EOF
cat > /etc/kubernetes/ <<EOF
apiVersion: ./v1beta1
kind: KubeletConfiguration
address: 0.0.0.0
port: 10250
readOnlyPort: 10255
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
cgroupsPerQOS: true
clusterDNS:
- 10.96.0.10
clusterDomain:
containerLogMaxFiles: 5
containerLogMaxSize: 10Mi
contentType: application/
cpuCFSQuota: true
cpuManagerPolicy: none
cpuManagerReconcilePeriod: 10s
enableControllerAttachDetach: true
enableDebuggingHandlers: true
enforceNodeAllocatable:
- pods
eventBurst: 10
eventRecordQPS: 5
evictionHard:
: 15%
: 100Mi
: 10%
: 5%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: true
fileCheckFrequency: 20s
hairpinMode: promiscuous-bridge
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 20s
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
imageMinimumGCAge: 2m0s
iptablesDropBit: 15
iptablesMasqueradeBit: 14
kubeAPIBurst: 10
kubeAPIQPS: 5
makeIPTablesUtilChains: true
maxOpenFiles: 1000000
maxPods: 110
nodeStatusUpdateFrequency: 10s
oomScoreAdj: -999
podPidsLimit: -1
registryBurst: 10
registryPullQPS: 5
resolvConf: /etc/
rotateCertificates: true
runtimeRequestTimeout: 2m0s
serializeImagePulls: true
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
volumeStatsAggPeriod: 1m0s
EOF
3、启动kubelet(所有节点)
systemctl daemon-reload && systemctl enable --now kubelet
4、kube-proxy配置(master节点)
cd /root/k8s-ha-install
kubectl -n kube-system create serviceaccount kube-proxy
kubectl create clusterrolebinding system:kube-proxy --clusterrole system:node-proxier --serviceaccount kube-system:kube-proxy
SECRET=$(kubectl -n kube-system get sa/kube-proxy \
--output=jsonpath='{.secrets[0].name}')
JWT_TOKEN=$(kubectl -n kube-system get secret/$SECRET \
--output=jsonpath='{.}' | base64 -d)
PKI_DIR=/etc/kubernetes/pki
K8S_DIR=/etc/kubernetes
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ --embed-certs=true --server=https://172.16.55.150:6443 --kubeconfig=${K8S_DIR}/
kubectl config set-credentials kubernetes --token=${JWT_TOKEN} --kubeconfig=/etc/kubernetes/
kubectl config set-context kubernetes --cluster=kubernetes --user=kubernetes --kubeconfig=/etc/kubernetes/
kubectl config use-context kubernetes --kubeconfig=/etc/kubernetes/
- 将kube-proxy的systemd Service文件发送到其他节点
- 需要更改kube-proxy/的clusterCIDR: 192.168.0.0/12参数为pod的网段。
for NODE in pro-k8s-master; do
scp ${K8S_DIR}/ $NODE:/etc/kubernetes/
scp kube-proxy/ $NODE:/etc/kubernetes/
scp kube-proxy/ $NODE:/usr/lib/systemd/system/
done
for NODE in pro-k8s-node01 pro-k8s-node02 pro-k8s-node03; do
scp /etc/kubernetes/ $NODE:/etc/kubernetes/
scp kube-proxy/ $NODE:/etc/kubernetes/
scp kube-proxy/ $NODE:/usr/lib/systemd/system/
done
5、启动(所有节点)
systemctl daemon-reload && systemctl enable --now kube-proxy
6、Calico配置(master节点)
cd /root/k8s-ha-install/calico/
sed -i 's#etcd_endpoints: "http://<ETCD_IP>:<ETCD_PORT>"#etcd_endpoints: "https://172.16.55.150:2379"#g'
ETCD_CA=`cat /etc/kubernetes/pki/etcd/ | base64 | tr -d '\n'`
ETCD_CERT=`cat /etc/kubernetes/pki/etcd/ | base64 | tr -d '\n'`
ETCD_KEY=`cat /etc/kubernetes/pki/etcd/ | base64 | tr -d '\n'`
sed -i "s@# etcd-key: null@etcd-key: ${ETCD_KEY}@g; s@# etcd-cert: null@etcd-cert: ${ETCD_CERT}@g; s@# etcd-ca: null@etcd-ca: ${ETCD_CA}@g"
sed -i 's#etcd_ca: ""#etcd_ca: "/calico-secrets/etcd-ca"#g; s#etcd_cert: ""#etcd_cert: "/calico-secrets/etcd-cert"#g; s#etcd_key: "" #etcd_key: "/calico-secrets/etcd-key" #g'
POD_SUBNET="192.168.0.0/12"
sed -i 's@# - name: CALICO_IPV4POOL_CIDR@- name: CALICO_IPV4POOL_CIDR@g; s@# value: "192.168.0.0/16"@ value: '"${POD_SUBNET}"'@g'
kubectl apply -f
七、二进制CoreDNS&Metrics
1、安装CoreDNS(master节点)
cd /root/k8s-ha-install/
sed -i "s#10.96.0.10#10.96.0.10#g" CoreDNS/
kubectl create -f CoreDNS/
kubectl get po -n kube-system -l k8s-app=kube-dns
2、安装Metrics Server
cd /root/k8s-ha-install/metrics-server-0./
kubectl create -f .
kubectl top node
八、生产环境k8s集群关键性配置
1、docker配置 (所有节点)
cat > /etc/docker/ <<EOF
{
"registry-mirrors": [
"",
".",
""
],
"exec-opts": ["=systemd"],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"log-opts": {
"max-size": "300m",
"max-file": "2"
},
"live-restore": true
}
EOF
2、更新配置(所有节点)
systemctl daemon-reload
3、controller-manager配置(master节点)
vim /usr/lib/systemd/system/
--experimental-cluster-signing-duration=876000h0m0s \
systemctl daemon-reload&&systemctl restart kube-controller-manager
4、kubelet配置(所有节点)
cat > /etc/systemd/system// <<EOF
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/ --kubeconfig=/etc/kubernetes/"
Environment="KUBELET_SYSTEM_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/ --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_CONFIG_ARGS=--config=/etc/kubernetes/ --pod-infra-container-image=/google_containers/pause-amd64:3.2"
Environment="KUBELET_EXTRA_ARGS=--node-labels=/node='' --tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 --image-pull-progress-deadline=30m"
ExecStart=
ExecStart=/usr/local/bin/kubelet \$KUBELET_KUBECONFIG_ARGS \$KUBELET_CONFIG_ARGS \$KUBELET_SYSTEM_ARGS \$KUBELET_EXTRA_ARGS
EOF
添加参数
systemctl daemon-reload&&systemctl restart kubelet
5、添加参数
vim /etc/kubernetes/
allowedUnsafeSysctls:
- "*"
- "net.ipv4.*"
kubeReserved:
cpu: "10m"
memory: 10Mi
ephemeral-storage: 10Mi
systemReserved:
cpu: "10m"
memory: 20Mi
ephemeral-storage: 1Gi
systemctl daemon-reload&&systemctl restart kubelet