部署kubelet、kube-proxy
分发kubelet、kube-proxy二进制文件
在master部署步骤解压缩后的kubernetes/server/bin
将kubelet、kube-proxy二进制文件拷贝到所有节点的/usr/local/bin
分发证书
将以下证书复制到所有节点的/etc/kubernetes/pki/
目录
ca.crt
检查在生成kubeconf
环节有没有将kube-proxy.kubeconf
分发到各个节点的/etc/kubernetes
目录,如果没有,分发之
生成kubelet、kube-proxy配置
kubelet配置
注意resolvConf字段
/etc/resolv.conf是nameserver 127.0.0.53
,那么将resolvConf配置为/run/systemd/resolve/resolv.conf
将下面生成的kubelet-config.yaml配置文件分发到所有节点/etc/kubernetes目录
cat > kubelet-config.yaml <<EOF
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: cgroupfs
cgroupsPerQOS: true
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
configMapAndSecretChangeDetectionStrategy: Watch
containerLogMaxFiles: 5
containerLogMaxSize: 10Mi
contentType: application/vnd.kubernetes.protobuf
cpuCFSQuota: true
cpuCFSQuotaPeriod: 100ms
cpuManagerPolicy: none
cpuManagerReconcilePeriod: 10s
enableControllerAttachDetach: true
enableDebuggingHandlers: true
enforceNodeAllocatable:
- pods
eventBurst: 10
eventRecordQPS: 5
evictionHard:
imagefs.available: 15%
memory.available: 100Mi
nodefs.available: 10%
nodefs.inodesFree: 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
kind: KubeletConfiguration
kubeAPIBurst: 10
kubeAPIQPS: 5
makeIPTablesUtilChains: true
maxOpenFiles: 1000000
maxPods: 110
nodeLeaseDurationSeconds: 40
nodeStatusReportFrequency: 1m0s
nodeStatusUpdateFrequency: 10s
oomScoreAdj: -999
podPidsLimit: -1
port: 10250
registryBurst: 10
registryPullQPS: 5
resolvConf: /run/systemd/resolve/resolv.conf
rotateCertificates: true
runtimeRequestTimeout: 2m0s
serializeImagePulls: true
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
volumeStatsAggPeriod: 1m0s
EOF
kube-proxy配置
node_name 是每个k8s节点名称,每个节点的节点名称不能重复
在所有节点上执行以下命令,生成kube-proxy配置
node_name=worker1
cat > /etc/kubernetes/kube-proxy-config.yaml <<EOF
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
bindAddress: 0.0.0.0
clientConnection:
acceptContentTypes: ""
burst: 10
contentType: application/vnd.kubernetes.protobuf
kubeconfig: /etc/kubernetes/kube-proxy.kubeconf
qps: 5
clusterCIDR: 10.244.0.0/16
configSyncPeriod: 15m0s
conntrack:
max: null
maxPerCore: 32768
min: 131072
tcpCloseWaitTimeout: 1h0m0s
tcpEstablishedTimeout: 24h0m0s
enableProfiling: false
healthzBindAddress: 0.0.0.0:10256
hostnameOverride: ${node_name}
iptables:
masqueradeAll: false
masqueradeBit: 14
minSyncPeriod: 0s
syncPeriod: 30s
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: rr
strictARP: false
syncPeriod: 30s
metricsBindAddress: 127.0.0.1:10249
mode: ipvs
nodePortAddresses: null
oomScoreAdj: -999
portRange: ""
resourceContainer: /kube-proxy
udpIdleTimeout: 250ms
EOF
配置kubelet、kube-proxy system service启动文件
kubelet启动文件 在所有节点上执行 node_name 是每个k8s节点名称,每个节点的节点名称不能重复
node_name=worker1 cat > /etc/systemd/system/kubelet.service <<EOF [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/home/ [Service] ExecStart=/usr/local/bin/kubelet \\ --network-plugin=cni \\ --config=/etc/kubernetes/kubelet-config.yaml \\ --hostname-override=${node_name} \\ --pod-infra-container-image=gcr.azk8s.cn/google_containers/pause:3.1 \\ --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \\ --kubeconfig=/etc/kubernetes/kubelet.kubeconf Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target EOF
kube-proxy启动文件
cat > /etc/systemd/system/kube-proxy.service <<EOF [Unit] Description=kubelet: The Kubernetes Kube Proxy Documentation=https://kubernetes.io/docs/home/ [Service] ExecStart=/usr/local/bin/kube-proxy \\ --config=/etc/kubernetes/kube-proxy-config.yaml Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target EOF
启动kubelet、kube-proxy
systemctl daemon-reload
systemctl enanble kubelet kube-proxy
systemctl start kubelet kube-proxy
master节点污点处理和打节点标签
master节点做污点处理,不调动pod到master节点
kubectl taint nodes ${master_node_name} node-role.kubernetes.io/master="":NoSchedule
给节点打上标签
kubectl label --overwrite node ${master_node_name} kubernetes.io/role=master
kubectl label --overwrite node ${worker_node_name} kubernetes.io/role=worker
在master节点检查node节点
这个时候节点还是NoReady的,需要进行下一步网络插件安装才会Ready
kubectl get no
NAME STATUS ROLES AGE VERSION
master1 NotReady master 1m40s v1.15.0
master2 NotReady master 1m40s v1.15.0
master3 NotReady master 1m40s v1.15.0
worker1 NotReady node 1m14s v1.15.0
worker2 NotReady node 1m34s v1.15.0
worker3 NotReady node 1m12s v1.15.0
worker4 NotReady node 1m23s v1.15.0