系统环境配置
原文地址:k8s节点系统初始化+内核优化 - (sreok.cn)
k8s基本组件安装
可选一:使用Containerd作为Runtime (推荐)
原文地址:使用Containerd作为Kubernetes Runtime - (sreok.cn)
可选二:使用docker作为Runtime
原文地址:使用Docker作为Kubernetes Runtime - (sreok.cn)
部署etcd集群
原文地址:etcd 入门 - 二进制部署etcd集群 - (sreok.cn)
软链接etcd证书目录
1 | mkdir /etc/kubernetes/pki/etcd |
解压k8s安装包
1 | # 下载安装包 |
2.3.2查看版本
1 | [root@k8s-master01 ~]# kubelet --version |
2.3.3将组件发送至其他k8s节点
1 | Master='k8s-master02 k8s-master03' |
2.3创建证书相关文件
1 | # 请查看Github仓库 或者进行获取已经打好的包 |
3.相关证书生成
3.2.生成k8s相关证书
特别说明除外,以下操作在所有master节点操作
3.2.1 所有k8s节点创建证书存放目录
1 | mkdir -p /etc/kubernetes/pki |
3.2.2 master01节点生成k8s证书
1 | # 写入生成证书所需的配置文件 |
3.2.3 生成apiserver聚合证书
1 | cat > front-proxy-ca-csr.json << EOF |
3.2.4 生成controller-manage的证书
在《5.高可用配置》选择使用那种高可用方案 若使用 haproxy、keepalived 那么为 --server=https://192.168.1.36:9443
若使用 nginx方案,那么为 --server=https://127.0.0.1:8443
1 | cat > manager-csr.json << EOF |
3.2.5 生成kube-scheduler的证书
1 | cat > scheduler-csr.json << EOF |
3.2.6 生成admin的证书配置
1 | cat > admin-csr.json << EOF |
3.2.7 创建kube-proxy证书
在《5.高可用配置》选择使用那种高可用方案 若使用 haproxy、keepalived 那么为 --server=https://192.168.1.36:9443
若使用 nginx方案,那么为 --server=https://127.0.0.1:8443
1 | cat > kube-proxy-csr.json << EOF |
3.2.8 创建ServiceAccount Key ——secret
1 | openssl genrsa -out /etc/kubernetes/pki/sa.key 2048 |
3.2.9 将证书发送到其他master节点
1 | #其他节点创建目录 |
3.2.10 查看证书
1 | ls /etc/kubernetes/pki/ |
5.高可用配置(在Master服务器上操作)
注意* 5.1.1 和5.1.2 二选一即可
选择使用那种高可用方案,同时可以俩种都选用,实现内外兼顾的效果,比如: 5.1 的 NGINX方案实现集群内的高可用 5.2 的 haproxy、keepalived 方案实现集群外访问
在《3.2.生成k8s相关证书》
若使用 nginx方案,那么为 --server=https://127.0.0.1:8443
若使用 haproxy、keepalived 那么为 --server=https://192.168.1.36:9443
kube-vip高可用方案(推荐)
原文地址:k8s高可用方案-使用kube-vip作为控制平面负载入口 - (sreok.cn)
NGINX高可用方案
5.1.1 进行编译
1 | # 安装编译环境 |
5.1.2 写入启动配置
在所有主机上执行
1 | # 写入nginx配置文件 |
5.2 keepalived和haproxy 高可用方案
5.2.1安装keepalived和haproxy服务
1 | systemctl disable --now firewalld |
5.2.2修改haproxy配置文件(配置文件一样)
1 | # cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak |
参数
1 | 这段配置代码是指定了一个HAProxy负载均衡器的配置。下面对各部分进行详细解释: |
5.2.3Master01配置keepalived master节点
1 | #cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak |
5.2.4Master02配置keepalived backup节点
1 | # cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak |
5.2.5Master03配置keepalived backup节点
1 | # cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak |
参数
1 | 这是一个用于配置keepalived的配置文件。下面是对每个部分的详细解释: |
5.2.6健康检查脚本配置(lb主机)
1 | cat > /etc/keepalived/check_apiserver.sh << EOF |
5.2.7启动服务
1 | systemctl daemon-reload |
5.2.8测试高可用
1 | # 能ping同 |
6.k8s组件配置
所有k8s节点创建以下目录
1 | mkdir -p /etc/kubernetes/manifests/ /etc/systemd/system/kubelet.service.d /var/lib/kubelet /var/log/kubernetes |
6.1.创建apiserver(所有master节点)
6.1.1master01节点配置
1 | cat > /usr/lib/systemd/system/kube-apiserver.service << EOF |
6.1.2master02节点配置
1 | cat > /usr/lib/systemd/system/kube-apiserver.service << EOF |
6.1.3master03节点配置
1 | cat > /usr/lib/systemd/system/kube-apiserver.service << EOF |
参数
1 | 该配置文件是用于定义Kubernetes API Server的systemd服务的配置。systemd是一个用于启动和管理Linux系统服务的守护进程。 |
6.1.4启动apiserver(所有master节点)
1 | systemctl daemon-reload |
6.2.配置kube-controller-manager service
1 | # 所有master节点配置,且配置相同 |
参数
1 | 这是一个用于启动 Kubernetes 控制器管理器的 systemd 服务单元文件。下面是对每个部分的详细解释: |
6.2.1启动kube-controller-manager,并查看状态
1 | systemctl daemon-reload |
6.3.配置kube-scheduler service
6.3.1所有master节点配置,且配置相同
1 | cat > /usr/lib/systemd/system/kube-scheduler.service << EOF |
参数
1 | 这是一个用于启动 Kubernetes 调度器的 systemd 服务单元文件。下面是对每个部分的详细解释: |
6.3.2启动并查看服务状态
1 | systemctl daemon-reload |
7.TLS Bootstrapping配置
7.1在master01上配置
1 | # 在《5.高可用配置》选择使用那种高可用方案 |
7.2查看集群状态,没问题的话继续后续操作
1 | # 1.28 版本只能查看到一个etcd 属于正常现象 |
8.node节点配置
8.1.在master01上将证书复制到node节点
1 | cd /etc/kubernetes/ |
8.2.kubelet配置
注意 : 8.2.1 和 8.2.2 需要和 上方 2.1 和 2.2 对应起来
8.2.1当使用docker作为Runtime
1 | cat > /usr/lib/systemd/system/kubelet.service << EOF |
8.2.2当使用Containerd作为Runtime (推荐)
1 | mkdir -p /var/lib/kubelet /var/log/kubernetes /etc/systemd/system/kubelet.service.d /etc/kubernetes/manifests/ |
8.2.3所有k8s节点创建kubelet的配置文件
1 | cat > /etc/kubernetes/kubelet-conf.yml <<EOF |
8.2.4启动kubelet
1 | systemctl daemon-reload |
8.2.5查看集群
1 | [root@k8s-master01 ~]# kubectl get node |
8.2.6查看容器运行时
1 | [root@k8s-master01 ~]# kubectl describe node | grep Runtime |
8.3.kube-proxy配置
8.3.1将kubeconfig发送至其他节点
1 | # master-1执行 |
8.3.2所有k8s节点添加kube-proxy的service文件
1 | cat > /usr/lib/systemd/system/kube-proxy.service << EOF |
8.3.3所有k8s节点添加kube-proxy的配置
1 | cat > /etc/kubernetes/kube-proxy.yaml << EOF |
8.3.4启动kube-proxy
1 | systemctl daemon-reload |
9.安装网络插件
注意 9.1 和 9.2 二选其一即可,建议在此处创建好快照后在进行操作,后续出问题可以回滚
centos7 要升级libseccomp 不然 无法安装网络插件
1 | # https://github.com/opencontainers/runc/releases |
9.1安装Calico
9.1.1更改calico网段
1 | wget https://mirrors.chenby.cn/https://github.com/projectcalico/calico/blob/master/manifests/calico-typha.yaml |
9.1.2查看容器状态
1 | # calico 初始化会很慢 需要耐心等待一下,大约十分钟左右 |
9.2 安装cilium
9.2.1 安装helm
1 | # [root@k8s-master01 ~]# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 |
9.2.2 安装cilium
1 | # 添加源 |
9.2.3 查看
1 | [root@k8s-master01 ~]# kubectl get pod -A | grep cil |
9.2.4 下载专属监控面板
安装时候没有创建 监控可以忽略
1 | [root@k8s-master01 yaml]# wget https://mirrors.chenby.cn/https://raw.githubusercontent.com/cilium/cilium/1.12.1/examples/kubernetes/addons/prometheus/monitoring-example.yaml |
9.2.5 下载部署测试用例
说明 测试用例 需要在 安装CoreDNS 之后即可完成
1 | wget https://mirrors.chenby.cn/https://raw.githubusercontent.com/cilium/cilium/master/examples/kubernetes/connectivity-check/connectivity-check.yaml |
9.2.6 查看pod
1 | [root@k8s-master01 yaml]# kubectl get pod -A |
9.2.7 修改为NodePort
安装时候没有创建 监控可以忽略
1 | [root@k8s-master01 yaml]# kubectl edit svc -n kube-system hubble-ui |
9.2.8 查看端口
安装时候没有创建 监控可以忽略
1 | [root@k8s-master01 yaml]# kubectl get svc -A | grep monit |
9.2.9 访问
安装时候没有创建 监控可以忽略
1 | http://192.168.1.31:30707 |
10.安装CoreDNS
10.1以下步骤只在master01操作
10.1.1修改文件
1 | # 下载tgz包 |
11.安装Metrics Server
11.1以下步骤只在master01操作
11.1.1安装Metrics-server
在新版的Kubernetes中系统资源的采集均使用Metrics-server,可以通过Metrics采集节点和Pod的内存、磁盘、CPU和网络的使用率
1 | # 下载 |
11.1.2稍等片刻查看状态
1 | kubectl top node |
12.集群验证
12.1部署pod资源
1 | cat<<EOF | kubectl apply -f - |
12.2用pod解析默认命名空间中的kubernetes
1 | # 查看name |
12.3测试跨命名空间是否可以解析
1 | # 查看有那些name |
12.4每个节点都必须要能访问Kubernetes的kubernetes svc 443和kube-dns的service 53
1 | telnet 10.96.0.1 443 |
12.5Pod和Pod之前要能通
1 | kubectl get po -owide |
12.6创建三个副本,可以看到3个副本分布在不同的节点上(用完可以删了)
1 | cat<<EOF | kubectl apply -f - |
13.安装dashboard
1 | helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/ |
13.1更改dashboard的svc为NodePort,如果已是请忽略
1 | kubectl edit svc kubernetes-dashboard -n kube-system |
13.2查看端口号
1 | kubectl get svc kubernetes-dashboard -n kube-system |
13.3创建token
1 | cat > dashboard-user.yaml << EOF |
13.3登录dashboard
14.ingress安装
14.1执行部署
1 | wget https://mirrors.chenby.cn/https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml |
14.2过滤查看ingress端口
1 | # 修改为nodeport |
15.IPv6测试
1 | #部署应用 |
16.安装命令行自动补全功能
1 | yum install bash-completion -y |
附录
1 | # 镜像加速器可以使用DaoCloud仓库,替换规则如下 |