网站建设的用处,江门做网站的公司,404错误页面放在网站的哪里,外贸企业 访问国外网站目录 一.二进制部署k8s 
常见的K8S安装部署方式#xff1a; 
k8s部署 二进制与高可用的区别 
二.部署k8s 
初始化操作#xff1a; 
每台node安装docker#xff1a; 
在 master01 节点上操作; 
准备cfssl证书生成工具:#xff1a; 
执行脚本文件#xff1a; 
拉入etcd压缩包… 
目录 一.二进制部署k8s 
常见的K8S安装部署方式 
k8s部署 二进制与高可用的区别 
二.部署k8s 
初始化操作 
每台node安装docker 
在 master01 节点上操作; 
准备cfssl证书生成工具: 
执行脚本文件 
拉入etcd压缩包 
创建用于存放 etcd 配置文件命令文件证书的目录 
执行etcd.sh脚本 
将目录所有文件复制到node节点上 
修改node节点的etcd文件 
启动etcd服务 
检查etcd群集状态 
查看etcd集群成员列表 
编辑安装 Master 组件准备生成CA证书 
创建用于生成CA证书、相关组件的证书和私钥的目录 
创建kubernetes工作目录 
复制CA证书、apiserver相关证书和私钥到 kubernetes工作目录的 ssl 子目录中 
上传解压 kubernetes 压缩包 
复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中 
解压master.zip 
启动 scheduler 服务 
启动 controller-manager 服务 
生成kubectl连接集群的kubeconfig文件: 
过kubectl工具查看当前集群组件状态 部署 Worker Node 组件 
创建kubernetes工作目录 
在 master01 节点上操作 
上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中: 
授权执行脚本 
RBAC授权使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书 
master节点启动 kubelet 服务 
通过 CSR 请求 
在 node01 节点上操作 
启动proxy服务 一.二进制部署k8s 
常见的K8S安装部署方式 Minikube是一个工具可以在本地快速运行一个单节点微型K8S仅用于学习、预览K8S的一些特性使用。 部署地址https://kubernetes.io/docs/setup/minikube 
Kubeadm也是一个工具提供kubeadm init和kubeadm join用于快速部署K8S集群相对简单。 https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/ 
二进制安装部署 生产首选从官方下载发行版的二进制包手动部署每个组件和自签TLS证书组成K8S集群新手推荐。 https://github.com/kubernetes/kubernetes/releases 
Kubeadm降低部署门槛但屏蔽了很多细节遇到问题很难排查。如果想更容易可控推荐使用二进制包部署Kubernetes集群虽然手动部署麻烦点期间可以学习很多工作原理也利于后期维护。 
k8s部署 二进制与高可用的区别 
二进制部署 部署难管理方便集群伸展性能好 更稳定集群规模到达一定的规模(几百个节点、上万个Pod)二进制稳定性是要高于kubeadm部署 遇到故障宿主机起来了进程也会起来。 
kubeadm部署 部署简单管理难 是以一种容器管理容器的方式允许的组件及服务故障恢复时间比二进制慢 遇到故障启动宿主机再启动进程最后去启动容器集群才能恢复速度比二进制慢 
二.部署k8s 
k8s master节点192.168.233.1020 
k8s node节点192.168.233.3040 容器引擎为docker 
etcd集群192.168.233.10,30,40 
负载均衡nginxkeepalive01master 192.168.233.50 负载均衡nginxkeepalive02backup192.168.233.60 
初始化操作 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭selinux setenforce 0 sed -i s/enforcing/disabled/ /etc/selinux/config 关闭swap swapoff -a sed -ri s/.*swap.*/#/ /etc/fstab  根据规划设置主机名 hostnamectl set-hostname master01 hostnamectl set-hostname node01 hostnamectl set-hostname node02 在master添加hosts cat  /etc/hosts  EOF 192.168.233.10 master01 192.168.233.30 node01 192.168.233.40 node02 EOF 调整内核参数 cat  /etc/sysctl.d/k8s.conf  EOF #开启网桥模式可将网桥的流量传递给iptables链 net.bridge.bridge-nf-call-ip6tables  1 net.bridge.bridge-nf-call-iptables  1 #关闭ipv6协议 net.ipv6.conf.all.disable_ipv61 net.ipv4.ip_forward1 EOF sysctl --system 时间同步 yum install ntpdate -y ntpdate time.windows.com 每台node安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  切换到docker目录下添加文件 {registry-mirrors: [https://6ijb8ubo.mirror.aliyuncs.com],exec-opts: [native.cgroupdriversystemd],log-driver:json-file,log-opts:{max-size:500m,max-file:3}
} 
. 
安装设置为开机自动启动 yum install -y docker-ce docker-ce-cli containerd.io systemctl start docker.service systemctl enable docker.service  在 master01 节点上操作; 
准备cfssl证书生成工具: 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 wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo chmod x /usr/local/bin/* 创建工作目录 添加脚本文件 #!/bin/bash
#配置证书生成策略让 CA 软件知道颁发有什么功能的证书生成用来签发其他组件证书的根证书
cat  ca-config.json EOF
{signing: {default: {expiry: 87600h},profiles: {usages: [signing,key encipherment,server auth,client auth]}}}
}
EOF#ca-config.json可以定义多个 profiles分别指定不同的过期时间、使用场景等参数
#后续在签名证书时会使用某个 profile此实例只有一个 www 模板。
#expiry指定了证书的有效期87600h 为10年如果用默认值一年的话证书到期后集群会立即宕掉
#signing表示该证书可用于签名其它证书生成的 ca.pem 证书中 CATRUE
#key encipherment表示使用非对称密钥加密如 RSA 加密
#server auth表示client可以用该 CA 对 server 提供的证书进行验证
#client auth表示server可以用该 CA 对 client 提供的证书进行验证
#注意标点符号最后一个字段一般是没有逗号的。#-----------------------
#生成CA证书和私钥根证书和私钥
cat  ca-csr.json EOF
{CN: etcd,key: {algo: rsa,size: 2048{C: CN,L: Beijing,ST: Beijing}]
}
EOF#CNCommon Name浏览器使用该字段验证网站或机构是否合法一般写的是域名 
#key指定了加密算法一般使用rsasize2048
#CCountry国家
#STState州省
#LLocality地区,城市
#O: Organization Name组织名称公司名称
#OU: Organization Unit Name组织单位名称公司部门cfssl gencert -initca ca-csr.json | cfssljson -bare ca#生成的文件
#ca-key.pem根证书私钥
#ca.pem根证书
#ca.csr根证书签发请求文件#注意CSRJSON 文件用的是相对路径所以 cfssl 的时候需要 csr 文件的路径下执行也可以指定为绝对路径。
#cfssljson 将 cfssl 生成的证书json格式变为文件承载式证书-bare 用于命名生成的证书文件。
#-----------------------
{CN: etcd,hosts: [192.168.233.10,192.168.233.30,192.168.233.40],key: {algo: rsa,size: 2048},names: [{C: CN,L: BeiJing,ST: BeiJing}]
}
EOF#hosts将所有 etcd 集群节点添加到 host 列表需要指定所有 etcd 集群的节点 ip 或主机名不能使用网段新增 etcd 服务器需要重新签发证书。cfssl gencert -caca.pem -ca-keyca-key.pem -configca-config.json -profilewww server-csr.json | cfssljson -bare server#生成的文件
#server.csr服务器的证书请求文件
#server-key.pem服务器的私钥
#server.pem服务器的数字签名证书#-config引用证书生成策略文件 ca-config.json
#-profile指定证书生成策略文件中的的使用场景比如 ca-config.json 中的 www#!/bin/bash
#example: ./etcd.sh etcd01 192.168.233.10 etcd02https://192.168.233.30:2380,etcd03https://192.168.233.40:2380#创建etcd配置文件/opt/etcd/cfg/etcd
ETCD_NAME$1
ETCD_IP$2
ETCD_CLUSTER$3WORK_DIR/opt/etcd#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLShttps://${ETCD_IP}:2380
ETCD_ADVERTISE_CLIENT_URLShttps://${ETCD_IP}:2379
ETCD_INITIAL_CLUSTERetcd01https://${ETCD_IP}:2380,${ETCD_CLUSTER}
ETCD_INITIAL_CLUSTER_TOKENetcd-cluster
ETCD_INITIAL_CLUSTER_STATEnew
EOF#Member:成员配置
#ETCD_NAME节点名称集群中唯一。成员名字集群中必须具备唯一性如etcd01#Clustering集群配置
#ETCD_INITIAL_CLUSTER_TOKEN集群Token。用于区分不同集群。本地如有多个集群要设为不同
#ETCD_INITIAL_CLUSTER_STATE加入集群的当前状态new是新集群existing表示加入已有集群。#创建etcd.service服务管理文件
cat  /usr/lib/systemd/system/etcd.service EOF
[Unit]
DescriptionEtcd Server
Afternetwork.target
Afternetwork-online.target
Wantsnetwork-online.target[Service]
Typenotify
EnvironmentFile${WORK_DIR}/cfg/etcd
ExecStart${WORK_DIR}/bin/etcd \
--cert-file${WORK_DIR}/ssl/server.pem \
--key-file${WORK_DIR}/ssl/server-key.pem \
--trusted-ca-file${WORK_DIR}/ssl/ca.pem \
--peer-cert-file${WORK_DIR}/ssl/server.pem \
--peer-key-file${WORK_DIR}/ssl/server-key.pem \
--peer-trusted-ca-file${WORK_DIR}/ssl/ca.pem \
--loggerzap \
--enable-v2
Restarton-failure
LimitNOFILE65536[Install]
WantedBymulti-user.target
EOF#--enable-v2开启 etcd v2 API 接口。当前 flannel 版本不支持 etcd v3 通信
#--loggerzap使用 zap 日志框架。zap.Logger 是go语言中相对日志库中性能最高的
#--peer开头的配置项用于指定集群内部TLS相关证书peer 证书这里全部都使用同一套证书认证
#不带--peer开头的的参数是指定 etcd 服务器TLS相关证书server 证书这里全部都使用同一套证书认证systemctl daemon-reload
systemctl enable etcd
systemctl restart etcd 
执行脚本文件 ./etcd-cert.sh 移动文件 mkdir etcd-cert mv ca* server* etcd-cert 拉入etcd压缩包 解压 tar zxvf etcd-v3.4.26-linux-amd64.tar.gz 创建用于存放 etcd 配置文件命令文件证书的目录 mkdir -p /opt/etcd/{cfg,bin,ssl} .切换到k8s中将命令移动到bin下 mv etcd etcdctl /opt/etcd/bin/ 复制etcd-cert下的.pem结尾文件到ssl目录下 cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/ 执行etcd.sh脚本 ./etcd.sh etcd01 192.168.233.10 etcd02https://192.168.233.30:2380,etcd03https://192.168.233.40:2380 查看端口 将目录所有文件复制到node节点上 scp -r /opt/etcd/ root192.168.233.30:/opt/ scp -r /opt/etcd/ root192.168.233.40:/opt/ scp /usr/lib/systemd/system/etcd.service root192.168.233.30:/usr/lib/systemd/system/ scp /usr/lib/systemd/system/etcd.service root192.168.233.40:/usr/lib/systemd/system/ 修改node节点的etcd文件 vim /opt/etcd/cfg/etcd 启动etcd服务 systemctl start etcd systemctl enable etcd systemctl status etcd 检查etcd群集状态 ETCDCTL_API3 /opt/etcd/bin/etcdctl --cacert/opt/etcd/ssl/ca.pem --cert/opt/etcd/ssl/server.pem --key/opt/etcd/ssl/server-key.pem --endpointshttps://192.168.233.10:2379,https://192.168.233.30:2379,https://192.168.233.40:2379 endpoint health --write-outtable 查看etcd集群成员列表 ETCDCTL_API3 /opt/etcd/bin/etcdctl --cacert/opt/etcd/ssl/ca.pem --cert/opt/etcd/ssl/server.pem --key/opt/etcd/ssl/server-key.pem --endpointshttps://192.168.233.10:2379,https://192.168.233.30:2379,https://192.168.233.40:2379 --write-outtable member list 安装 Master 组件准备生成CA证书 #!/bin/bash
#配置证书生成策略让 CA 软件知道颁发有什么功能的证书生成用来签发其他组件证书的根证书
cat  ca-config.json EOF
{signing: {default: {expiry: 87600h},profiles: {kubernetes: {expiry: 87600h,usages: [signing,key encipherment,server auth,client auth]}}}
}
EOF#生成CA证书和私钥根证书和私钥
cat  ca-csr.json EOF
{CN: kubernetes,key: {algo: rsa,size: 2048},names: [{C: CN,L: Beijing,ST: Beijing,O: k8s,OU: System}]
}
EOF
#!/bin/bash
#配置证书生成策略让 CA 软件知道颁发有什么功能的证书生成用来签发其他组件证书的根证书
cat  ca-config.json EOF
{signing: {default: {expiry: 87600h},profiles: {kubernetes: {expiry: 87600h,usages: [signing,key encipherment,server auth,client auth]}}}
}
EOF#生成CA证书和私钥根证书和私钥
cat  ca-csr.json EOF
{CN: kubernetes,key: {algo: rsa,size: 2048},names: [{C: CN,L: Beijing,ST: Beijing,O: k8s,OU: System}]
}
EOFcfssl gencert -initca ca-csr.json | cfssljson -bare ca -#-----------------------
#生成 apiserver 的证书和私钥apiserver和其它k8s组件通信使用
#hosts中将所有可能作为 apiserver 的 ip 添加进去后面 keepalived 使用的 VIP 也要加入
cat  apiserver-csr.json EOF
{CN: kubernetes,hosts: [10.0.0.1,127.0.0.1,192.168.233.10,192.168.233.20, 192.168.233.100,192.168.233.50,192.168.233.60,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#-----------------------
#生成 kubectl 连接集群的证书和私钥kubectl 和 apiserver 通信使用
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#-----------------------
#生成 kube-proxy 的证书和私钥kube-proxy 和 apiserver 通信使用
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}]
}
EOFcfssl gencert -caca.pem -ca-keyca-key.pem -configca-config.json -profilekubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy 
创建用于生成CA证书、相关组件的证书和私钥的目录 移动脚本文件到目录中; 执行文件 创建kubernetes工作目录 mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs} 复制CA证书、apiserver相关证书和私钥到 kubernetes工作目录的 ssl 子目录中 cp ca*pem apiserver*pem /opt/kubernetes/ssl/ 上传解压 kubernetes 压缩包 tar xf kubernetes-server-linux-amd64.tar.gz 复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中 cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/ ln -s /opt/kubernetes/bin/* /usr/local/bin/ 获取随机数前16个字节内容以十六进制格式输出并删除其中空格 head -c 16 /dev/urandom | od -An -t x | tr -d   生成 token.csv 文件按照 Token序列号,用户名,UID,用户组 的格式生成 #!/bin/bash #获取随机数前16个字节内容以十六进制格式输出并删除其中空格 BOOTSTRAP_TOKEN$(head -c 16 /dev/urandom | od -An -t x | tr -d  ) #生成 token.csv 文件按照 Token序列号,用户名,UID,用户组 的格式生成 cat  /opt/kubernetes/cfg/token.csv EOF ${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,system:kubelet-bootstrap EOF 解压master.zip 授权 二进制文件、token、证书都准备好后开启 apiserver 服务 ./apiserver.sh 192.168.233.10 https://192.168.233.10:2379,https://192.168.233.30:2379,https://192.168.233.40:2379 安全端口6443用于接收HTTPS请求用于基于Token文件或客户端证书等认证 netstat -natp | grep 6443 启动 scheduler 服务 #!/bin/bash
##创建 kube-scheduler 启动参数配置文件
MASTER_ADDRESS$1cat /opt/kubernetes/cfg/kube-scheduler EOF
KUBE_SCHEDULER_OPTS--logtostderrfalse \\
--v2 \\
--log-dir/opt/kubernetes/logs \\
--leader-electtrue \\
--kubeconfig/opt/kubernetes/cfg/kube-scheduler.kubeconfig \\
--bind-address$MASTER_ADDRESS
EOF#-?kubeconfig连接 apiserver 用的配置文件用于识别 k8s 集群
#--leader-electtrue当该组件启动多个时自动启动 leader 选举
#k8s 中 Controller-Manager 和 Scheduler 的选主逻辑k8s 中的 etcd 是整个集群所有状态信息的存储涉及数据的读写和多个 etcd 之间数据的同步对数据的一致性要求严格所以使用较复杂的 raft 算法来选择用于提交数据的主节点。而 apiserver 作为集群入口本身是无状态的 web 服务器多个 apiserver 服务之间直接负载
请求并不需要做选主。Controller-Manager 和 Scheduler 作为任务类型的组件比如 controller-manager 内置的 k8s 各种资源对象的控制器实时的 watch apiserver 获取对象最新的变化事件做期望状态和实际状态调整scheduler watch 未绑定节点的 pod 做节点选择 显然多个这些任务同时工作是完全没有必要的所以 controller-manager 和 scheduler 也是需要选主的但是选主逻辑和 etcd 不一样的这里只需要保证从多个 controller-manager 和 scheduler 之间选出一个 leader 进入工作状态即可而无需考虑它们之间的数据一致和同步。##生成kube-scheduler证书
#创建证书请求文件
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#生成证书和私钥#生成kubeconfig配置文件
KUBE_CONFIG/opt/kubernetes/cfg/kube-scheduler.kubeconfig
KUBE_APISERVERhttps://192.168.233.10:6443#配置kubernetes集群参数
kubectl config set-cluster kubernetes \--certificate-authority/opt/kubernetes/ssl/ca.pem \--embed-certstrue \--server${KUBE_APISERVER} \--kubeconfig${KUBE_CONFIG}
#配置客户端认证参数
kubectl config set-credentials kube-scheduler \--client-certificate./kube-scheduler.pem \--client-key./kube-scheduler-key.pem \--embed-certstrue \--kubeconfig${KUBE_CONFIG}
#设置上下文参数 
kubectl config set-context default \--clusterkubernetes \--userkube-scheduler \--kubeconfig${KUBE_CONFIG}
#设置默认上下文
kubectl config use-context default --kubeconfig${KUBE_CONFIG}##创建 kube-scheduler.service 服务管理文件
cat /usr/lib/systemd/system/kube-scheduler.service EOF
[Unit]
DescriptionKubernetes Scheduler
Documentationhttps://github.com/kubernetes/kubernetes[Service]
EnvironmentFile-/opt/kubernetes/cfg/kube-scheduler
ExecStart/opt/kubernetes/bin/kube-scheduler \$KUBE_SCHEDULER_OPTS
Restarton-failure[Install]
WantedBymulti-user.target
EOFsystemctl daemon-reload
systemctl enable kube-scheduler
systemctl restart kube-scheduler 
启动脚本 启动 controller-manager 服务 #!/bin/bash
##创建 kube-controller-manager 启动参数配置文件
MASTER_ADDRESS$1cat /opt/kubernetes/cfg/kube-controller-manager EOF
KUBE_CONTROLLER_MANAGER_OPTS--logtostderrfalse \\
--v2 \\
--log-dir/opt/kubernetes/logs \\
--leader-electtrue \\
--kubeconfig/opt/kubernetes/cfg/kube-controller-manager.kubeconfig \\
--bind-address$MASTER_ADDRESS \\
--allocate-node-cidrstrue \\
--cluster-cidr10.244.0.0/16 \\
--service-cluster-ip-range10.0.0.0/24 \\
--cluster-signing-cert-file/opt/kubernetes/ssl/ca.pem \\
--cluster-signing-key-file/opt/kubernetes/ssl/ca-key.pem  \\
--root-ca-file/opt/kubernetes/ssl/ca.pem \\
--service-account-private-key-file/opt/kubernetes/ssl/ca-key.pem \\
--cluster-signing-duration87600h0m0s
EOF#––leader-elect当该组件启动多个时自动选举HA
#-–kubeconfig连接 apiserver 用的配置文件用于识别 k8s 集群##生成kube-controller-manager证书
#创建证书请求文件
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#生成证书和私钥#生成kubeconfig配置文件
KUBE_CONFIG/opt/kubernetes/cfg/kube-controller-manager.kubeconfig
KUBE_APISERVERhttps://192.168.233.10:6443#配置kubernetes集群参数
kubectl config set-cluster kubernetes \--certificate-authority/opt/kubernetes/ssl/ca.pem \--embed-certstrue \--server${KUBE_APISERVER} \--kubeconfig${KUBE_CONFIG}
#配置客户端认证参数
kubectl config set-credentials kube-controller-manager \--client-certificate./kube-controller-manager.pem \--client-key./kube-controller-manager-key.pem \--embed-certstrue \--kubeconfig${KUBE_CONFIG}
#设置上下文参数
kubectl config set-context default \--clusterkubernetes \--userkube-controller-manager \--kubeconfig${KUBE_CONFIG}
#设置默认上下文
kubectl config use-context default --kubeconfig${KUBE_CONFIG}##创建 kube-controller-manager.service 服务管理文件
cat /usr/lib/systemd/system/kube-controller-manager.service EOF
[Unit]
DescriptionKubernetes Controller Manager
Documentationhttps://github.com/kubernetes/kubernetes[Service]
EnvironmentFile-/opt/kubernetes/cfg/kube-controller-manager
ExecStart/opt/kubernetes/bin/kube-controller-manager \$KUBE_CONTROLLER_MANAGER_OPTS
Restarton-failure[Install]
WantedBymulti-user.target
EOFsystemctl daemon-reload
systemctl enable kube-controller-manager
systemctl restart kube-controller-manager执行脚本 ./controller-manager.sh 192.168.233.10  生成kubectl连接集群的kubeconfig文件: #!/bin/bash
mkdir /root/.kube
KUBE_CONFIG/root/.kube/config
KUBE_APISERVERhttps://192.168.233.10:6443#切换到k8s证书目录操作
cd /opt/k8s/k8s-cert/--certificate-authority/opt/kubernetes/ssl/ca.pem \--embed-certstrue \--client-certificate./admin.pem \--client-key./admin-key.pem \
kubectl config set-context default \--kubeconfig${KUBE_CONFIG}
#设置默认环境上下文
kubectl config use-context default --kubeconfig${KUBE_CONFIG}
#生成的 kubeconfig 被保存到 /root/.kube/config 文件#########################################################
#集群参数
#本段设置了所需要访问的集群的信息。使用set-cluster设置了需要访问的集群如上为kubernetes这只是个名称实际为--server指向的apiserver--certificate-authority设置了该集群的公钥--embed-certs为true表示
将--certificate-authority证书写入到kubeconfig中--server则表示该集群的kube-apiserver地址#用户参数
#本段主要设置用户的相关信息主要是用户证书。如上的用户名为admin证书为/opt/kubernetes/ssl/admin.pem私钥为/opt/kubernetes/ssl/admin-key.pem。注意客户端的证书首先要经过集群CA的签署否则不会被集群
认可。此处使用的是ca认证方式也可以使用token认证如kubelet的 TLS Boostrap 机制下的 bootstrapping 使
用的就是token认证方式。上述kubectl使用的是ca认证不需要token字段#上下文参数
#集群参数和用户参数可以同时设置多对在上下文参数中将集群参数和用户参数关联起来。上面的上下文名称为default集群为kubenetes用户为admin表示使用admin的用户凭证来访问kubenetes集群的default命名空间也可以增加--namspace来指定访问的命名空间。#最后使用 kubectl config use-context default 来使用名为 default 的环境项来作为配置。 如果配置了多个环
境项可以通过切换不同的环境项名字来访问到不同的集群环境。
######################################################### 
执行脚本 查看文件 过kubectl工具查看当前集群组件状态 kubectl get cs 查看版本信息 kubectl version 绑定默认cluster-admin管理员集群角色授权kubectl访问集群 kubectl create clusterrolebinding cluster-system-anonymous --clusterrolecluster-admin --usersystem:anonymous 部署 Worker Node 组件 
在所有 node 节点上操作30,40 
创建kubernetes工作目录 mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs} 上传 node.zip 到 /opt 目录中解压 node.zip 压缩包 #!/bin/bashNODE_ADDRESS$1
DNS_SERVER_IP${2:-10.0.0.2}
cat /opt/kubernetes/cfg/kubelet EOF
KUBELET_OPTS--logtostderrfalse \\
--v2 \\
--log-dir/opt/kubernetes/logs \\
--hostname-overridenode01 \\
--network-plugincni \\
--kubeconfig/opt/kubernetes/cfg/kubelet.kubeconfig \\
--bootstrap-kubeconfig/opt/kubernetes/cfg/bootstrap.kubeconfig \\
--config/opt/kubernetes/cfg/kubelet.config \\
--cert-dir/opt/kubernetes/ssl \\
--pod-infra-container-imageregistry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2
EOF#--network-plugin启用CNI
#--bootstrap-kubeconfig指定连接 apiserver 的 bootstrap.kubeconfig 文件
#--config指定kubelet配置文件的路径启动kubelet时将从此文件加载其配置
#--cert-dir指定master颁发的kubelet证书生成目录#----------------------
cat /opt/kubernetes/cfg/kubelet.config EOF
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: ${NODE_ADDRESS}
port: 10250
readOnlyPort: 10255
cgroupDriver: systemd
clusterDNS:
- ${DNS_SERVER_IP} 
clusterDomain: cluster.local
failSwapOn: false
authentication:anonymous:enabled: true
EOF#PS当命令行参数与此配置文件kubelet.config有相同的值时就会覆盖配置文件中的该值。#----------------------
#创建 kubelet.service 服务管理文件
cat /usr/lib/systemd/system/kubelet.service EOF
[Unit]
DescriptionKubernetes Kubelet
Afterdocker.service
Requiresdocker.service[Service]
EnvironmentFile/opt/kubernetes/cfg/kubelet
ExecStart/opt/kubernetes/bin/kubelet \$KUBELET_OPTS
Restarton-failure
KillModeprocess[Install]
WantedBymulti-user.target
EOFsystemctl daemon-reload
systemctl enable kubelet
systemctl restart kubelet#!/bin/bashNODE_ADDRESS$1#创建 kube-proxy 启动参数配置文件
cat /opt/kubernetes/cfg/kube-proxy EOF
KUBE_PROXY_OPTS--logtostderrfalse \\
--v2 \\
--log-dir/opt/kubernetes/logs \\
--hostname-override${NODE_ADDRESS} \\
--cluster-cidr10.244.0.0/16 \\
--proxy-modeipvs \\
--kubeconfig/opt/kubernetes/cfg/kube-proxy.kubeconfig
EOF#--kubeconfig: 指定连接 apiserver 的 kubeconfig 文件
#rr: round-robin轮询。
#lc: least connection最小连接数。
#dh: destination hashing目的地址哈希。
#sh: source hashing ,原地址哈希。
#sed: shortest expected delay最短期望延时。
#nq: never queue 永不排队。#----------------------
#创建 kube-proxy.service 服务管理文件
cat /usr/lib/systemd/system/kube-proxy.service EOF
[Unit]
DescriptionKubernetes Proxy
Afternetwork.target[Service]
EnvironmentFile-/opt/kubernetes/cfg/kube-proxy
ExecStart/opt/kubernetes/bin/kube-proxy \$KUBE_PROXY_OPTS
Restarton-failure[Install]
WantedBymulti-user.target
EOFsystemctl daemon-reload
systemctl enable kube-proxy
systemctl restart kube-proxy#!/bin/bashNODE_ADDRESS$1
#创建 kubelet 启动参数配置文件
cat /opt/kubernetes/cfg/kubelet EOF
KUBELET_OPTS--logtostderrfalse \\
--hostname-overridenode02 \\
--network-plugincni \\
--kubeconfig/opt/kubernetes/cfg/kubelet.kubeconfig \\
--bootstrap-kubeconfig/opt/kubernetes/cfg/bootstrap.kubeconfig \\
--config/opt/kubernetes/cfg/kubelet.config \\
--cert-dir/opt/kubernetes/ssl \\
--pod-infra-container-imageregistry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2
EOF#--network-plugin启用CNI
#--bootstrap-kubeconfig指定连接 apiserver 的 bootstrap.kubeconfig 文件
#--config指定kubelet配置文件的路径启动kubelet时将从此文件加载其配置
#--cert-dir指定master颁发的kubelet证书生成目录#----------------------
cat /opt/kubernetes/cfg/kubelet.config EOF
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: ${NODE_ADDRESS}
port: 10250
readOnlyPort: 10255
cgroupDriver: systemd
clusterDNS:
- ${DNS_SERVER_IP} 
clusterDomain: cluster.local
failSwapOn: false
authentication:anonymous:enabled: true
EOF#PS当命令行参数与此配置文件kubelet.config有相同的值时就会覆盖配置文件中的该值。#----------------------
#创建 kubelet.service 服务管理文件
cat /usr/lib/systemd/system/kubelet.service EOF
[Unit]
DescriptionKubernetes Kubelet
Afterdocker.service
Requiresdocker.service[Service]
EnvironmentFile/opt/kubernetes/cfg/kubelet
ExecStart/opt/kubernetes/bin/kubelet \$KUBELET_OPTS
Restarton-failure
KillModeprocess[Install]
WantedBymulti-user.target
EOFsystemctl daemon-reload
systemctl enable kubelet
systemctl restart kubelet#!/bin/bashNODE_ADDRESS$1#创建 kube-proxy 启动参数配置文件
cat /opt/kubernetes/cfg/kube-proxy EOF
KUBE_PROXY_OPTS--logtostderrfalse \\
--v2 \\
--log-dir/opt/kubernetes/logs \\
--hostname-override${NODE_ADDRESS} \\
--cluster-cidr10.244.0.0/16 \\
--proxy-modeipvs \\
--kubeconfig/opt/kubernetes/cfg/kube-proxy.kubeconfig
EOF#--kubeconfig: 指定连接 apiserver 的 kubeconfig 文件
#rr: round-robin轮询。
#lc: least connection最小连接数。
#dh: destination hashing目的地址哈希。
#sh: source hashing ,原地址哈希。
#sed: shortest expected delay最短期望延时。
#nq: never queue 永不排队。#----------------------
#创建 kube-proxy.service 服务管理文件
cat /usr/lib/systemd/system/kube-proxy.service EOF
[Unit]
DescriptionKubernetes Proxy
Afternetwork.target[Service]
EnvironmentFile-/opt/kubernetes/cfg/kube-proxy
ExecStart/opt/kubernetes/bin/kube-proxy \$KUBE_PROXY_OPTS
Restarton-failure[Install]
WantedBymulti-user.target
EOFsystemctl daemon-reload
systemctl enable kube-proxy
systemctl restart kube-proxy授权 在 master01 节点上操作 
把 kubelet、kube-proxy 拷贝到 node 节点; cd /opt/k8s/kubernetes/server/bin scp kubelet kube-proxy root192.168.233.30:/opt/kubernetes/bin/ scp kubelet kube-proxy root192.168.233.40:/opt/kubernetes/bin/ 上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中: #!/bin/bash
#example: kubeconfig 192.168.233.10 /opt/k8s/k8s-cert/
#创建bootstrap.kubeconfig文件BOOTSTRAP_TOKEN$(awk -F , {print $1} /opt/kubernetes/cfg/token.csv)
APISERVER$1
SSL_DIR$2export KUBE_APISERVERhttps://$APISERVER:6443# 设置集群参数
kubectl config set-cluster kubernetes \--certificate-authority$SSL_DIR/ca.pem \--embed-certstrue \--server${KUBE_APISERVER} \--kubeconfigbootstrap.kubeconfig
#--embed-certstrue表示将ca.pem证书写入到生成的bootstrap.kubeconfig文件中# 设置客户端认证参数kubelet 使用 bootstrap token 认证
kubectl config set-credentials kubelet-bootstrap \--token${BOOTSTRAP_TOKEN} \--kubeconfigbootstrap.kubeconfig# 设置上下文参数
kubectl config set-context default \--clusterkubernetes \--userkubelet-bootstrap \--kubeconfigbootstrap.kubeconfig# 使用上下文参数生成 bootstrap.kubeconfig 文件
kubectl config use-context default --kubeconfigbootstrap.kubeconfig#----------------------#创建kube-proxy.kubeconfig文件
# 设置集群参数
kubectl config set-cluster kubernetes \--certificate-authority$SSL_DIR/ca.pem \--embed-certstrue \--server${KUBE_APISERVER} \--kubeconfigkube-proxy.kubeconfig# 设置客户端认证参数kube-proxy 使用 TLS 证书认证
kubectl config set-credentials kube-proxy \--client-certificate$SSL_DIR/kube-proxy.pem \--client-key$SSL_DIR/kube-proxy-key.pem \--embed-certstrue \--kubeconfigkube-proxy.kubeconfig# 设置上下文参数
kubectl config set-context default \--clusterkubernetes \--userkube-proxy \--kubeconfigkube-proxy.kubeconfig# 使用上下文参数生成 kube-proxy.kubeconfig 文件
kubectl config use-context default --kubeconfigkube-proxy.kubeconfig授权执行脚本 chmod x kubeconfig.sh ./kubeconfig.sh 192.168.233.10 /opt/k8s/k8s-cert/ 把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷贝到 node 节点 scp bootstrap.kubeconfig kube-proxy.kubeconfig root192.168.233.30:/opt/kubernetes/cfg/ scp bootstrap.kubeconfig kube-proxy.kubeconfig root192.168.233.40:/opt/kubernetes/cfg/ 查看一下 RBAC授权使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书 kubectl create clusterrolebinding kubelet-bootstrap --clusterrolesystem:node-bootstrapper --userkubelet-bootstrap master节点启动 kubelet 服务 在 master01 节点上操作通过 CSR 请求 通过 CSR 请求 kubectl certificate approve node-csr-vH5p3H5QliAUh9WjCnwXPDb84pFhcj-FrHiTIRDeeU8 Approved,Issued 表示已授权 CSR 请求并签发证书 查看节点由于网络插件还没有部署节点会没有准备就绪 NotReady kubectl get node 在 node01 节点上操作 
加载 ip_vs 模块 ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o ^[^.]*);do echo $i; /sbin/modinfo -F filename $i /dev/null 21  /sbin/modprobe $i;done 启动proxy服务 ./proxy.sh 192.168.233.30 master节点 
node02上启动kubelet master节点通过 CSR 请求 node02上启动proxy  文章转载自: http://www.morning.znpyw.cn.gov.cn.znpyw.cn http://www.morning.ayftwl.cn.gov.cn.ayftwl.cn http://www.morning.rwlnk.cn.gov.cn.rwlnk.cn http://www.morning.wpsfc.cn.gov.cn.wpsfc.cn http://www.morning.mkydt.cn.gov.cn.mkydt.cn http://www.morning.rnnwd.cn.gov.cn.rnnwd.cn http://www.morning.fwdln.cn.gov.cn.fwdln.cn http://www.morning.ffbl.cn.gov.cn.ffbl.cn http://www.morning.zhffz.cn.gov.cn.zhffz.cn http://www.morning.hxfrd.cn.gov.cn.hxfrd.cn http://www.morning.nnqrb.cn.gov.cn.nnqrb.cn http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn http://www.morning.qqklk.cn.gov.cn.qqklk.cn http://www.morning.wsyq.cn.gov.cn.wsyq.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.jqmmf.cn.gov.cn.jqmmf.cn http://www.morning.fy974.cn.gov.cn.fy974.cn http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn http://www.morning.gwwky.cn.gov.cn.gwwky.cn http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn http://www.morning.rkqqf.cn.gov.cn.rkqqf.cn http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn http://www.morning.lltdf.cn.gov.cn.lltdf.cn http://www.morning.mhlkc.cn.gov.cn.mhlkc.cn http://www.morning.stpkz.cn.gov.cn.stpkz.cn http://www.morning.xclgf.cn.gov.cn.xclgf.cn http://www.morning.rqkck.cn.gov.cn.rqkck.cn http://www.morning.xbdd.cn.gov.cn.xbdd.cn http://www.morning.blqmn.cn.gov.cn.blqmn.cn http://www.morning.sfdsn.cn.gov.cn.sfdsn.cn http://www.morning.csnmd.cn.gov.cn.csnmd.cn http://www.morning.rckmz.cn.gov.cn.rckmz.cn http://www.morning.rghkg.cn.gov.cn.rghkg.cn http://www.morning.ptqpd.cn.gov.cn.ptqpd.cn http://www.morning.pkfpl.cn.gov.cn.pkfpl.cn http://www.morning.jqjnl.cn.gov.cn.jqjnl.cn http://www.morning.lqgtx.cn.gov.cn.lqgtx.cn http://www.morning.rlbfp.cn.gov.cn.rlbfp.cn http://www.morning.wwkft.cn.gov.cn.wwkft.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn http://www.morning.mqbsm.cn.gov.cn.mqbsm.cn http://www.morning.jfmjq.cn.gov.cn.jfmjq.cn http://www.morning.stlgg.cn.gov.cn.stlgg.cn http://www.morning.lcbgf.cn.gov.cn.lcbgf.cn http://www.morning.glnfn.cn.gov.cn.glnfn.cn http://www.morning.rnpt.cn.gov.cn.rnpt.cn http://www.morning.tjwlp.cn.gov.cn.tjwlp.cn http://www.morning.qbrs.cn.gov.cn.qbrs.cn http://www.morning.clkjn.cn.gov.cn.clkjn.cn http://www.morning.807yy.cn.gov.cn.807yy.cn http://www.morning.bpmnz.cn.gov.cn.bpmnz.cn http://www.morning.frpfk.cn.gov.cn.frpfk.cn http://www.morning.xsgxp.cn.gov.cn.xsgxp.cn http://www.morning.cbtn.cn.gov.cn.cbtn.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.svtxeu.com.gov.cn.svtxeu.com http://www.morning.jqkrt.cn.gov.cn.jqkrt.cn http://www.morning.bwgrd.cn.gov.cn.bwgrd.cn http://www.morning.mlnzx.cn.gov.cn.mlnzx.cn http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn http://www.morning.ytmx.cn.gov.cn.ytmx.cn http://www.morning.mkzdp.cn.gov.cn.mkzdp.cn http://www.morning.pqkyx.cn.gov.cn.pqkyx.cn http://www.morning.pmxw.cn.gov.cn.pmxw.cn http://www.morning.bjsites.com.gov.cn.bjsites.com http://www.morning.rlns.cn.gov.cn.rlns.cn http://www.morning.lhytw.cn.gov.cn.lhytw.cn http://www.morning.jlrym.cn.gov.cn.jlrym.cn http://www.morning.gtbjf.cn.gov.cn.gtbjf.cn http://www.morning.zqkms.cn.gov.cn.zqkms.cn http://www.morning.bkslb.cn.gov.cn.bkslb.cn http://www.morning.gmplp.cn.gov.cn.gmplp.cn http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn http://www.morning.bnylg.cn.gov.cn.bnylg.cn http://www.morning.ynryz.cn.gov.cn.ynryz.cn http://www.morning.nypsz.cn.gov.cn.nypsz.cn http://www.morning.zlfxp.cn.gov.cn.zlfxp.cn http://www.morning.bnrnb.cn.gov.cn.bnrnb.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn