k8s集群搭建
Kubernetes (1.22.2)安装手册(Ubuntu非高可用版)
安装前准备工作
(重要!)安装k8s 1.22.2 版本需要的硬件条件:
所有节点:
cpu数量2个及以上
4G 以上内存
不用开虚拟化
(重要!!)虚拟机不要用克隆,每台都要单独创建否则会出问题。
未安装docker 之前创建一个快照。
安装docker、kubelet,并初始化集群后在创建一个快照。
未安装cni插件之前创建一个快照,以便于随时更改calico 和fluence
kubeadm 初始化失败检查,重置kubeadm。
ip 地址规划:
|
|
各节点安装时需要更换apt源:(更新和安装deb包都很快!!!)
|
|
1. 设置hosts解析
操作节点:所有节点(master
)均需执行
- 修改hostname hostname必须只能包含小写字母、数字、","、"-",且开头结尾必须是小写字母或数字
|
|
2. 调整系统配置
操作节点: 所有的master和slave节点(master,k8s-slave
)需要执行
本章下述操作均以master为例,其他节点均是相同的操作(ip和hostname的值换成对应机器的真实值)
设置iptables
|
|
- 关闭swap
|
|
- 修改内核参数
|
|
- 设置apt源
|
|
3. 安装docker
操作节点: 所有节点
|
|
注意要关闭docker 默认的cgroup 否则会出现kubeadm 初始化失败!!!!
这是cgroup驱动问题。默认情况下Kubernetes cgroup驱动程序设置为system,但docker设置为systemd。我们需要更改Docker cgroup驱动,通过创建配置文件/etc/docker/daemon.json
并添加以下行:
|
|
然后,为使配置生效,你必须重启docker和kubelet。
|
|
重置kubeadm
|
|
查看所有节点是否有污点
|
|
给kubectl 设置别名为k,永久生效。
退出当前用户在进入就生效了。
|
|
删除master节点上的污点,删除后pod可以调度到master上。
|
|
使用kubectl中的强制删除命令
|
|
自动补全
|
|
查看所有pod
|
|
部署kubernetes
1. 安装 kubeadm, kubelet 和 kubectl
操作节点: 所有的master和slave节点(master,k8s-slave
) 需要执行
|
|
2. 初始化配置文件
操作节点: 只在master节点(master
)执行
|
|
3. 提前下载镜像
操作节点:只在master节点(master
)执行
|
|
4. 初始化master节点
操作节点:只在master节点(k8s-master
)执行
|
|
若初始化成功后,最后会提示如下信息:
|
|
接下来按照上述提示信息操作,配置kubectl客户端的认证
|
|
**⚠️注意:**此时使用 kubectl get nodes查看节点应该处于notReady状态,因为还未配置网络插件
若执行初始化过程中出错,根据错误信息调整后,执行kubeadm reset后再次执行init操作即可
5. 添加slave节点到集群中
操作节点:所有的slave节点(worker1
`worker2`)需要执行
在每台slave节点,执行如下命令,该命令是在kubeadm init成功后提示信息中打印出来的,需要替换成实际init后打印出的命令。
|
|
6. 安装calico插件
操作节点:只在master节点(master
)执行
方式一:直接安装(未使用!!!)
下载资源文件
1
wget https://docs.projectcalico.org/manifests/calico-etcd.yaml
修改配置
注释掉文件的前22行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
1 --- 2 # Source: calico/templates/calico-etcd-secrets.yaml 3 # The following contains k8s Secrets for use with a TLS enabled etcd cluster. 4 # For information on populating Secrets, see http://kubernetes.io/docs/user-guide/secrets/ 5 #apiVersion: v1 6 #kind: Secret 7 #type: Opaque 8 #metadata: 9 # name: calico-etcd-secrets 10 # namespace: kube-system 11 #data: 12 # Populate the following with etcd TLS configuration if desired, but leave blank if 13 # not using TLS for etcd. 14 # The keys below should be uncommented and the values populated with the base64 15 # encoded contents of each file that would be associated with the TLS data. 16 # Example command for encoding a file contents: cat <file> | base64 -w 0 17 # etcd-key: null 18 # etcd-cert: null 19 # etcd-ca: null 20 --- 21 # Source: calico/templates/calico-config.yaml 22 # This ConfigMap is used to configure a self-hosted Calico installation. 23 kind: ConfigMap 24 apiVersion: v1 25 metadata: 26 name: calico-config 27 namespace: kube-system ...
修改configmap
注意30-35行,其中etcd_endpoints换成环境的etcd地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
23 kind: ConfigMap 24 apiVersion: v1 25 metadata: 26 name: calico-config 27 namespace: kube-system 28 data: 29 # Configure this with the location of your etcd cluster. 30 etcd_endpoints: "https://10.4.7.60:2379" 31 # If you're using TLS enabled etcd uncomment the following. 32 # You must also populate the Secret below with these files. 33 etcd_ca: "/calico-secrets/etcd-ca" # "/calico-secrets/etcd-ca" 34 etcd_cert: "/calico-secrets/etcd-cert" # "/calico-secrets/etcd-cert" 35 etcd_key: "/calico-secrets/etcd-key" # "/calico-secrets/etcd-key" 36 # Typha is disabled. 37 typha_service_name: "none" 38 # Configure the backend to use. 39 calico_backend: "bird"
添加calico-node环境变量
注意297-302行为新添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
285 containers: 286 # Runs calico-node container on each Kubernetes node. This 287 # container programs network policy and routes on each 288 # host. 289 - name: calico-node 290 image: docker.io/calico/node:v3.20.0 291 envFrom: 292 - configMapRef: 293 # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode. 294 name: kubernetes-services-endpoint 295 optional: true 296 env: 297 - name: KUBERNETES_SERVICE_HOST 298 value: "10.4.7.60" 299 - name: KUBERNETES_SERVICE_PORT 300 value: "6443" 301 - name: KUBERNETES_SERVICE_PORT_HTTPS 302 value: "6443" 303 # The location of the etcd cluster. 304 - name: ETCD_ENDPOINTS 305 valueFrom: 306 configMapKeyRef: 307 name: calico-config 308 key: etcd_endpoints 309 # Location of the CA certificate for etcd. 310 - name: ETCD_CA_CERT_FILE
修改CIDR
注意371-372行,value值为k8s集群初始化的pod-network-cidr
1 2 3 4 5 6
370 # no effect. This should fall within `--cluster-cidr`. 371 - name: CALICO_IPV4POOL_CIDR 372 value: "10.244.0.0/16" 373 # Disable file logging so `kubectl logs` works. 374 - name: CALICO_DISABLE_FILE_LOGGING 375 value: "true"
创建secret
1
kubectl -n kube-system create secret generic calico-etcd-secrets --from-file=etcd-ca=/etc/kubernetes/pki/etcd/ca.crt --from-file=etcd-cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file=etcd-key=/etc/kubernetes/pki/etcd/healthcheck-client.key
创建calico资源清单
1
kubectl apply -f calico-etcd.yaml
等待pod启动完成
|
|
calico插件包:
|
|
方式二:使用operator安装(已成功!!!!!!)
安装operator
1
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
等待operator pod安装启动完成
1 2 3 4
kubectl -n tigera-operator get po NAME READY STATUS RESTARTS AGE tigera-operator-698876cbb5-kfpb2 1/1 Running 0 38m
镜像拉取比较慢,可以手动去节点docker pull拉取
编辑calico配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
vim custom-resources.yaml apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: # Configures Calico networking. calicoNetwork: # Note: The ipPools section cannot be modified post-install. ipPools: - blockSize: 26 cidr: 10.244.0.0/16 #修改和pod cidr一致 encapsulation: VXLANCrossSubnet natOutgoing: Enabled nodeSelector: all() --- # This section configures the Calico API server. # For more information, see: https://docs.projectcalico.org/v3.20/reference/installation/api#operator.tigera.io/v1.APIServer apiVersion: operator.tigera.io/v1 kind: APIServer metadata: name: default spec: {}
创建calico配置
1
kubectl apply -f custom-resources.yaml
等待operator自动创建calico的pod
|
|
7. 验证集群
操作节点: 在master节点(k8s-master
)执行
|
|
创建测试nginx服务
|
|
查看pod是否创建成功,并访问pod ip测试是否可用
|
|
8. 清理环境
如果你的集群安装过程中遇到了其他问题,我们可以使用下面的命令来进行重置:
|
|
设置apt源报错。换源
|
|
未安装cni插件pod状态
|
|