摘要
本文内容转自网络,个人学习记录使用,请勿传播
环境准备
软件版本
软件 | 版本 |
---|---|
操作系统 | CentOS7.3 |
Docker | 19-ce |
Kubernets | 1.21.13 |
服务器规划
角色 | IP | 独立组件 |
---|---|---|
k8s-master1 | 10.0.1.67 | docker,etcd |
k8s-master2 | 10.0.1.68 | docker,etcd |
k8s-master3 | 10.0.1.69 | docker,etcd |
k8s-node1 | 10.0.1.70 |
架构图
环境初始化
1 | 关闭防火墙: |
签发自签证书
获取CFSSL工具
1 | wget http://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/bin/cfssl |
创建ca证书签名请求文件
1 | $ cat ca-csr.json |
CN:Common Name,浏览器用此字段验证网站是否合法,一般写域名
C:Country,国家
ST:State,州、省
L:Locality,地区、城市
O:Organization Name,组织、公司
OU:Organization Unit Name,组织单位名称,公司部门
生成ca证书和私钥
1 | $ cfssl gencert -initca ca-csr.json | cfssl-json -bare ca |
二进制部署Etcd集群
创建基于ca证书的config配置文件
1 | $ cat ca-config.json |
创建etcd证书签名请求文件
1 | $ cat etcd-peer-csr.json |
生成etcd证书和私钥
1 | $ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json | cfssl-json -bare etcd-peer |
搭建etcd集群playbook
1 | # 目录结构 |
使用配置文件启动
https://etcd.io/docs/v3.5/op-guide/configuration/
https://github.com/etcd-io/etcd/blob/main/etcd.conf.yml.sample#L96
1 | name: infra{{ groups['etcd'].index(inventory_hostname) }} |
使用配置文件启动etcd命令
1 | etcd --config-file /home/etcd/etcd.cnf |
完整配置
1 | name: 'default' |
查看集群状态
1 | ETCDCTL_API=3 /home/work/k8s/etcd/etcdctl --cacert=/home/work/k8s/certs/etcd/ca.pem --cert=/home/work/k8s/certs/etcd/etcd-peer.pem --key=/home/work/k8s/certs/etcd/etcd-peer-key.pem --endpoints="https://10.0.1.67:2379,https://10.0.1.68:2379,https://10.0.1.69:2379" endpoint health --write-out=table |
安装配置docker环境
配置阿里源安装docker
1 | wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo |
修改docker配置
1 | cat /etc/docker/daemon.json |
部署k8s-master
配置阿里云yum源
1 | cat > /etc/yum.repos.d/kubernetes.repo << EOF |
第一台机器安装kubeadm,kubelet和kubectl
由于版本更新频繁,这里指定版本号部署:
1 | $ yum erase -y kubelet kubeadm kubectl |
生成初始化配置文件
1 | apiVersion: kubeadm.k8s.io/v1beta2 |
使用配置文件创建集群
1 | kubeadm init --config kubeadm-config.yaml |
初始化完成后,会有两个join的命令,带有 –control-plane 是用于加入组建多master集群的,不带的是加入节点的。
拷贝kubectl使用的连接k8s认证文件到默认路径:
1 | Your Kubernetes control-plane has initialized successfully! |
由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
使用kubectl工具:需要先将默认的认证文件复制到默认位置
1 | mkdir -p $HOME/.kube |
- 安装目录:/etc/kubernetes/
- 组件配置文件目录:/etc/kubernetes/manifests/
- 证书文件位置:/etc/kubernetes/pki
其他master节点加入集群
1 | # 拷贝证书文件 |
node节点加入集群
1 | yum install -y kubelet-1.21.0 kubeadm-1.21.0 |
安装Pod网络插件(CNI)
目前calico是Kubernets主流的网络方案,calico可以在三层工作,也可以实现udp封装的跨主机虚拟网络
1 | wget https://docs.projectcalico.org/manifests/calico.yaml |
下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 –pod-network-cidr指定的一样。
1 | kubectl apply -f calico.yaml |
扩容master节点
安装kubeadm,kubelet和kubectl
1 | $ yum erase -y kubelet kubeadm kubectl |
生成加入集群命令
1 | $ kubeadm init phase upload-certs --upload-certs |
其他
创建docker-registry
认证信息
1 | kubectl create secret docker-registry registry-auth --docker-username=admin --docker-password=harbor123 --docker-server=192.168.1.200 |
apiserver修改node端口范围
1 | - --service-node-port-range=8000-9000 |
故障排查
calico 组件添加后,pod是running状态但是没有ready
1 | # 有可能是有残留配置导致的 |