Kubernetes单Master集群二进制部署
服务器信息
| ip | 主机名 | 版本 | cpu | 内存 |
|---|---|---|---|---|
| 192.168.1.151 | k8s-node-151 | centos7 | 4 | 8 |
| 192.168.1.152 | k8s-node-152 | centos7 | 4 | 8 |
| 192.168.1.153 | k8s-node-153 | centos7 | 4 | 8 |
k8s版本
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.10", GitCommit:"8152330a2b6ca3621196e62966ef761b8f5a61bb", GitTreeState:"clean", BuildDate:"2021-08-11T18:06:15Z", GoVersion:"go1.15.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.10", GitCommit:"8152330a2b6ca3621196e62966ef761b8f5a61bb", GitTreeState:"clean", BuildDate:"2021-08-11T18:00:37Z", GoVersion:"go1.15.15", Compiler:"gc", Platform:"linux/amd64"}
系统配置
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
- 关闭swap分区
swapoff -a # 临时关闭
vim /etc/fstab # 注释到swap那一行 永久关闭
- 添加主机对应关系
echo '''
192.168.1.151 k8s-master-151
192.168.1.152 k8s-node-152
192.168.1.153 k8s-node-153
''' >> /etc/hosts
- 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
-
时间同步
-
下载生成证书工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson
Docker 安装
- 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
- 获取源
yum-config-manager \
--add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装docker
yum install docker-ce
- 配置cgroup驱动
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://01xxgaft.mirror.aliyuncs.com"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
systemctl daemon-reload
- 配置docker开机自启
systemctl start docker
systemctl enable docker
etcd安装
自签CA证书
- 创建生成etcd证书工作目录
mkdir /opt/etcd/tls -p
cd /opt/etcd/tls
- 生成自签CA配置ca-config.json
cat > ca-config.json << EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
- 生成自签CA配置ca-csr.json
cat > ca-csr.json << EOF
{
"CN": "etcd CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "YuMingYu",
"ST": "YuMingYu"
}
]
}
EOF
- 生成自签CA证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
签发etcd证书
cd /opt/etcd/tls
- 创建证书申请文件
cat > server-csr.json << EOF
{
"CN": "etcd",
"hosts": [
"127.0.0.1", "localhost",
"192.168.1.151", "k8s-node-151",
"192.168.1.152", "k8s-node-152",
"192.168.1.153", "k8s-node-153"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "YuMingYu",
"ST": "YuMingYu"
}
]
}
EOF
- 生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
安装
- 创建工作目录
mkdir /opt/etcd/{bin,conf,data} -p
- 下载并解压二进制包
cd /opt/etcd/
wget https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
tar -xf etcd-v3.4.9-linux-amd64.tar.gz
mv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/
- 创建etcd配置文件
cat > /opt/etcd/conf/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/opt/etcd/data/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.1.151:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.1.151:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.1.151:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.1.151:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.1.151:2380,etcd-2=https://192.168.1.152:2380,etcd-3=https://192.168.1.153:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
- 创建systemd配置文件
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/etcd/conf/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
--cert-file=/opt/etcd/tls/server.pem \
--key-file=/opt/etcd/tls/server-key.pem \
--peer-cert-file=/opt/etcd/tls/server.pem \
--peer-key-file=/opt/etcd/tls/server-key.pem \
--trusted-ca-file=/opt/etcd/tls/ca.pem \
--peer-trusted-ca-file=/opt/etcd/tls/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
- 将已配置好的文件转发到其他节点上
for i in 192.168.1.15{2..3}
do
scp -r /opt/etcd/ $i:/opt/
scp /usr/lib/systemd/system/etcd.service $i:/usr/lib/systemd/system/
done
# 修改k8s-node-152, k8s-node-153的etcd.conf配置文件中的节点名称和当前服务器IP
- 启动etcd并设置开机自启
systemctl daemon-reload
systemctl start etcd
systemctl enable etcd
- 验证
/opt/etcd/bin/etcdctl \
--cacert=/opt/etcd/tls/ca.pem \
--cert=/opt/etcd/tls/server.pem \
--key=/opt/etcd/tls/server-key.pem \
--endpoints="https://192.168.1.151:2379,https://192.168.1.152:2379,https://192.168.1.153:2379" \
endpoint health --write-out=table
master节点安装
环境准备
- 创建相关文件夹
mkdir /opt/k8s/{bin,conf,logs,tls} -p
cd /opt/k8s/
- 下载安装包
wget https://dl.k8s.io/v1.20.10/kubernetes-server-linux-amd64.tar.gz
tar xf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin
- 拷贝命令
cp kube-apiserver kube-scheduler kube-controller-manager /opt/k8s/bin
cp kubectl /usr/local/bin/
自签CA证书
- 生成自签CA配置ca-config.json
cd /opt/k8s/tls
cat > ca-config.json << EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
- 生成自签CA配置ca-csr.json
cat > ca-csr.json << EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
- 生成自签CA证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
kube-apiserver安装
- 创建证书申请文件
cd /opt/k8s/tls
cat > server-csr.json << EOF
{
"CN": "kubernetes",
"hosts": [
"10.0.0.1", "127.0.0.1",
"192.168.1.151", "192.168.1.152","192.168.1.153",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
- 生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
- 创建kube-apiserver配置文件
cd /opt/k8s/conf
cat > kube-apiserver.conf << EOF
KUBE_APISERVER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/k8s/logs \
--etcd-servers=https://192.168.1.151:2379,https://192.168.1.152:2379,https://192.168.1.153:2379 \
--bind-address=192.168.1.151 \
--secure-port=6443 \
--advertise-address=192.168.1.151 \
--allow-privileged=true \
--service-cluster-ip-range=10.0.0.0/24 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode=RBAC,Node \
--enable-bootstrap-token-auth=true \
--token-auth-file=/opt/k8s/conf/token.csv \
--service-node-port-range=30000-32767 \
--kubelet-client-certificate=/opt/k8s/tls/server.pem \
--kubelet-client-key=/opt/k8s/tls/server-key.pem \
--tls-cert-file=/opt/k8s/tls/server.pem \
--tls-private-key-file=/opt/k8s/tls/server-key.pem \
--client-ca-file=/opt/k8s/tls/ca.pem \
--service-account-key-file=/opt/k8s/tls/ca-key.pem \
--service-account-issuer=https://kubernetes.default.svc.cluster.local \
--service-account-signing-key-file=/opt/k8s/tls/server-key.pem \
--etcd-cafile=/opt/etcd/tls/ca.pem \
--etcd-certfile=/opt/etcd/tls/server.pem \
--etcd-keyfile=/opt/etcd/tls/server-key.pem \
--requestheader-client-ca-file=/opt/k8s/tls/ca.pem \
--proxy-client-cert-file=/opt/k8s/tls/server.pem \
--proxy-client-key-file=/opt/k8s/tls/server-key.pem \
--requestheader-allowed-names=kubernetes \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--enable-aggregator-routing=true \
--audit-log-maxage=30 \
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--audit-log-path=/opt/k8s/logs/k8s-audit.log"
EOF
- 创建 TLS bootstrapping token文件
cat > /opt/k8s/conf/token.csv << EOF
d19c0c66121edc24d0fd2b831f092c40,kubelet-bootstrap,10001,"system:node-bootstrapper"
EOF
- 创建systemd配置文件
cat > /usr/lib/systemd/system/kube-apiserver.service << EOF
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/k8s/conf/kube-apiserver.conf
ExecStart=/opt/k8s/bin/kube-apiserver \$KUBE_APISERVER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
- 启动并设置开机启动
systemctl start kube-apiserver
systemctl enable kube-apiserver
kube-controller-manager安装
- 创建证书请求文件
cd /opt/k8s/tls
cat > kube-controller-manager-csr.json << EOF
{
"CN": "system:kube-controller-manager",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "system:masters",
"OU": "System"
}
]
}
EOF
- 生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager
- 生成kubeconfig文件
KUBE_CONFIG="/opt/k8s/conf/kube-controller-manager.kubeconfig"
KUBE_APISERVER="https://192.168.1.151:6443"
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/tls/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-credentials kube-controller-manager \
--client-certificate=/opt/k8s/tls/kube-controller-manager.pem \
--client-key=/opt/k8s/tls/kube-controller-manager-key.pem \
--embed-certs=true \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-controller-manager \
--kubeconfig=${KUBE_CONFIG}
kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
- 创建kube-controller-manager配置文件
cd /opt/k8s/conf/
cat > kube-controller-manager.conf << EOF
KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/k8s/logs \
--leader-elect=true \
--kubeconfig=/opt/k8s/conf/kube-controller-manager.kubeconfig \
--bind-address=192.168.1.151 \
--allocate-node-cidrs=true \
--cluster-cidr=10.244.0.0/16 \
--service-cluster-ip-range=10.0.0.0/24 \
--cluster-signing-cert-file=/opt/k8s/tls/ca.pem \
--cluster-signing-key-file=/opt/k8s/tls/ca-key.pem \
--root-ca-file=/opt/k8s/tls/ca.pem \
--service-account-private-key-file=/opt/k8s/tls/ca-key.pem \
--cluster-signing-duration=87600h0m0s"
EOF
- 创建systemd配置文件
cat > /usr/lib/systemd/system/kube-controller-manager.service << EOF
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/k8s/conf/kube-controller-manager.conf
ExecStart=/opt/k8s/bin/kube-controller-manager \$KUBE_CONTROLLER_MANAGER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
- 启动并设置开机启动
systemctl start kube-controller-manager
systemctl enable kube-controller-manager
kube-scheduler安装
- 创建证书请求文件
cd /opt/k8s/tls
cat > kube-scheduler-csr.json << EOF
{
"CN": "system:kube-scheduler",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "system:masters",
"OU": "System"
}
]
}
EOF
- 生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler
- 生成kubeconfig文件
KUBE_CONFIG="/opt/k8s/conf/kube-scheduler.kubeconfig"
KUBE_APISERVER="https://192.168.1.151:6443"
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/tls/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-credentials kube-scheduler \
--client-certificate=/opt/k8s/tls/kube-scheduler.pem \
--client-key=/opt/k8s/tls/kube-scheduler-key.pem \
--embed-certs=true \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-scheduler \
--kubeconfig=${KUBE_CONFIG}
kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
- 创建kube-scheduler配置文件
cd /opt/k8s/conf/
cat > kube-scheduler.conf << EOF
KUBE_SCHEDULER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/k8s/logs \
--leader-elect \
--kubeconfig=/opt/k8s/conf/kube-scheduler.kubeconfig \
--bind-address=192.168.1.151"
EOF
- 创建systemd配置文件
cat > /usr/lib/systemd/system/kube-scheduler.service << EOF
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/k8s/conf/kube-scheduler.conf
ExecStart=/opt/k8s/bin/kube-scheduler \$KUBE_SCHEDULER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
- 启动并设置开机启动
systemctl start kube-scheduler
systemctl enable kube-scheduler
验证主节点
验证命令:kubectl get cs
需要按已下内容创建配置
- 创建证书请求文件
cd /opt/k8s/tls
cat > admin-csr.json <<EOF
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "system:masters",
"OU": "System"
}
]
}
EOF
- 生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
- 生成kubeconfig文件
mkdir /root/.kube
KUBE_CONFIG="/root/.kube/config"
KUBE_APISERVER="https://192.168.1.151:6443"
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/tls/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-credentials cluster-admin \
--client-certificate=/opt/k8s/tls/admin.pem \
--client-key=/opt/k8s/tls/admin-key.pem \
--embed-certs=true \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-context default \
--cluster=kubernetes \
--user=cluster-admin \
--kubeconfig=${KUBE_CONFIG}
kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap
node节点部署
- 创建相关文件夹
mkdir /opt/k8s/{bin,conf,logs,tls} -p
cd /opt/k8s/
- 下载安装包
wget https://dl.k8s.io/v1.20.10/kubernetes-server-linux-amd64.tar.gz
tar xf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin
- 拷贝命令
cp kubelet kube-proxy /opt/k8s/bin
kubelet安装
- 创建配置文件
cd /opt/k8s/conf
cat > kubelet.conf << EOF
KUBELET_OPTS="--logtostderr=false \\
--v=2 \\
--log-dir=/opt/k8s/logs \\
--hostname-override=k8s-node-151 \\
--network-plugin=cni \\
--kubeconfig=/opt/k8s/conf/kubelet.kubeconfig \\
--bootstrap-kubeconfig=/opt/k8s/conf/bootstrap.kubeconfig \\
--config=/opt/k8s/conf/kubelet-config.yml \\
--cert-dir=/opt/k8s/tls \\
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
EOF
- 创建配置yaml文件
cat > kubelet-config.yml << EOF
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: 0.0.0.0
port: 10250
readOnlyPort: 10255
cgroupDriver: cgroupfs
clusterDNS:
- 10.0.0.2
clusterDomain: cluster.local
failSwapOn: false
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /opt/k8s/tls/ca.pem
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
evictionHard:
imagefs.available: 15%
memory.available: 100Mi
nodefs.available: 10%
nodefs.inodesFree: 5%
maxOpenFiles: 1000000
maxPods: 110
EOF
- 创建kubeconfig文件
KUBE_CONFIG="/opt/k8s/conf/bootstrap.kubeconfig"
# apiserver IP:PORT
KUBE_APISERVER="https://192.168.1.151:6443"
# 与token.csv里保持一致 /opt/k8s/conf/token.csv
TOKEN="d19c0c66121edc24d0fd2b831f092c40"
# 生成 kubelet bootstrap kubeconfig 配置文件
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/tls/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-credentials "kubelet-bootstrap" \
--token=${TOKEN} \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-context default \
--cluster=kubernetes \
--user="kubelet-bootstrap" \
--kubeconfig=${KUBE_CONFIG}
kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
- 创建systemd配置文件
cat > /usr/lib/systemd/system/kubelet.service << EOF
[Unit]
Description=Kubernetes Kubelet
After=docker.service
[Service]
EnvironmentFile=/opt/k8s/conf/kubelet.conf
ExecStart=/opt/k8s/bin/kubelet \$KUBELET_OPTS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
- 升级systemd
yum -y upgrade systemd
- 启动并设置开机启动
systemctl start kubelet
systemctl enable kubelet
- 主节点允许kubelet证书申请并加入集群
#查看kubelet证书请求
kubectl get csr
#允许kubelet节点申请
kubectl certificate approve [csr name]
- 授权apiserver访问kubelet
cd /opt/k8s/conf
cat > apiserver-to-kubelet-rbac.yaml << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: system:kube-apiserver-to-kubelet
rules:
- apiGroups:
- ""
resources:
- nodes/proxy
- nodes/stats
- nodes/log
- nodes/spec
- nodes/metrics
- pods/log
verbs:
- "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:kube-apiserver
namespace: ""
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:kube-apiserver-to-kubelet
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: kubernetes
EOF
kubectl apply -f apiserver-to-kubelet-rbac.yaml
kube-proxy安装
- 创建证书请求文件
cd /opt/k8s/tls
cat > kube-proxy-csr.json << EOF
{
"CN": "system:kube-proxy",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
- 生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
- 生成kubeconfig文件
KUBE_CONFIG="/opt/k8s/conf/kube-proxy.kubeconfig"
KUBE_APISERVER="https://192.168.1.151:6443"
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/tls/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-credentials kube-proxy \
--client-certificate=/opt/k8s/tls/kube-proxy.pem \
--client-key=/opt/k8s/tls/kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=${KUBE_CONFIG}
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=${KUBE_CONFIG}
kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
- 创建配置文件
cd /opt/k8s/conf
cat > kube-proxy.conf << EOF
KUBE_PROXY_OPTS="--logtostderr=false \\
--v=2 \\
--log-dir=/opt/k8s/logs \\
--config=/opt/k8s/conf/kube-proxy-config.yml"
EOF
- 创建参数配置yaml文件
cat > kube-proxy-config.yml << EOF
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
metricsBindAddress: 0.0.0.0:10249
clientConnection:
kubeconfig: /opt/k8s/conf/kube-proxy.kubeconfig
hostnameOverride: k8s-node-151
clusterCIDR: 10.244.0.0/16
EOF
- 创建systemd管理文件
cat > /usr/lib/systemd/system/kube-proxy.service << EOF
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=/opt/k8s/conf/kube-proxy.conf
ExecStart=/opt/k8s/bin/kube-proxy \$KUBE_PROXY_OPTS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
- 启动并设置开机自启
systemctl start kube-proxy
systemctl enable kube-proxy
Calico插件安装
- 获取calico.yaml
mkdir /opt/k8s/addons
cd /opt/k8s/addons
wget http://docs.projectcalico.org/v3.20/manifests/calico.yaml
- 创建 calico
kubectl apply -f calico.yaml
Dashboard插件安装
- 获取dashboard.yaml
cd /opt/k8s/kubernetes/
mkdir src
tar xf kubernetes-src.tar.gz -C src
cp /opt/k8s/kubernetes/src/cluster/addons/dashboard/dashboard.yaml /opt/k8s/addons
cd /opt/k8s/addons
- 修改service kubernetes-dashboard 外网可访问
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
# --- 新增 ---
nodePort: 32000
type: NodePort
# --- 新增 ---
selector:
k8s-app: kubernetes-dashboard
- 配置账号
# 新增以下内容
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: dashboard-admin
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin-cluster-role
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
- 创建 dashboard
kubectl apply -f dashboard.yaml
CoreDNS插件安装
- 获取coredns.yaml
cp /opt/k8s/kubernetes/src/cluster/addons/dns/coredns/coredns.yaml.base /opt/k8s/addons/coredns.yaml
cd /opt/k8s/addons
- 修改配置
sed -i 's/__DNS__DOMAIN__/cluster.local/g' coredns.yaml
sed -i 's/__DNS__MEMORY__LIMIT__/256Mi/g' coredns.yaml # 此处可根据服务器资源修改
sed -i 's/__DNS__SERVER__/10.0.0.2/g' coredns.yaml
sed -i 's#k8s.gcr.io/coredns#egistry.aliyuncs.com/google_containers/coredns#g' coredns.yaml
- 创建 coredns
kubectl apply -f coredns.yaml

591

被折叠的 条评论
为什么被折叠?



