写点什么

k8s 集群安装经历

用户头像
追风少年
关注
发布于: 2021 年 10 月 20 日
k8s集群安装经历

前言

总体上分为三个步骤:


  1. 机器环境。可以选择本地机器、虚拟机、云环境。我尝试过虚拟机和云服务的集群搭建。虚拟机要注意配置好两块网卡,做到内网互通,外网可访问即可。

  2. 安装 docker

  3. 安装 k8s 集群


版本建议


Go:1.17 Docker:20.10.8 K8s:1.22.0 ubuntu 20.04

安装 docker

参考官方文档 https://docs.docker.com/engine/install/ubuntu/


运行 helloWorld



docker run hello-world
复制代码


Enable cgroup driver —— systemd



# 否则k8s 安装时候会报错:kubernetes:kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"
vi /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } systemctl daemon-reload systemctl restart docker
复制代码


设置开机启动



systemctl enable docker
复制代码

k8s 安装

切换 root 用户



sudo -i
复制代码

前置工作

配置流量转发



# 开机启动的时候,会自动在 /etc/modules-load.d/ 读取 *.conf 文件,这些 *.conf 文件中静态的包含了 需要在系统启动时无条件加载的内核模块列表。
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF


cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
复制代码


安装证书



# 证书安装的时候官方文档用的是k8s.io的镜像,这里改成阿里云的镜像。
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -


# 如果获取失败 gpg: no valid OpenPGP data found. 可以分两步安装
#1、curl -O https://packages.cloud.google.com/apt/doc/apt-key.gpg #该命令执行后会在当前目录下保存一个名称为nodesource.gpg.key的文件。
# 2、使用apt-key命令加载获取到的文件 apt-key add nodesource.gpg.key
复制代码


修改 k8s 镜像



sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
复制代码


Update apt package index, install kubelet, kubeadm and kubectl



sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
复制代码


这里,已经安装了 kubelet kubeadm kubectl 三个组件了。


*** 如果有多个节点,上述步骤都要执行***


安装 kubeadm 并 init

主节点安装 kubeadm


kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-advertise-address=172.21.0.9
复制代码


参考



kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/16 \
# 172.17.152.249/47.96.90.217
--apiserver-advertise-address=
复制代码


记录安装成功以后的信息,主要是 token



mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config


Alternatively, if you are the root user, you can run:


export KUBECONFIG=/etc/kubernetes/admin.conf


You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/


Then you can join any number of worker nodes by running the following on each as root:


kubeadm join 192.168.34.2:6443 --token knf9xg.7yk2xz3oav1e9ryn \
--discovery-token-ca-cert-hash sha256:6632260950fa52e6149700ff428bc292857a27600044371af6b5f33cb26385b2
复制代码


字段说明



查看安装日志



journalctl -f -u kubelet
复制代码


copy kubeconfig



mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码


untaint master 允许调度 POD 到 Master 上



kubectl taint nodes --all node-role.kubernetes.io/master-
复制代码

加入其它节点

这个时候需要加入其它节点



kubeadm join 192.168.2.116:6443 --token oig5z4.hofxyadrsfwhzxa9 \
--discovery-token-ca-cert-hash sha256:98172da8c89c09a176eb9e543e7decbc3a0dedf2c1a5ed16d83d16cb04e22513
复制代码


如果是集群情况,加入以后,查看 node 情况是 notReady,是因为网络还没有 ready。接下来要安装网络插件。



kubectl get nodes
复制代码

安装网络插件

参考网上的方法



# install cilium
helm install cilium cilium/cilium --version 1.9.1 \
--namespace kube-system \
--set kubeProxyReplacement=strict \
--set k8sServiceHost=192.168.34.2 \
--set k8sServicePort=6443


#install calico cni plugin
# https://docs.projectcalico.org/getting-started/kubernetes/quickstart
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
for i in `kubectl api-resources | grep true | awk '{print \$1}'`; do echo $i;kubectl get $i -n rook-ceph; done
复制代码


至此,k8s 的安装已经完成了,使用命令



kubectl apply -f https://k8s.io/examples/application/deployment.yaml
复制代码


部署一台 Nginx 验证一下安装是否成功

安装失败处理

具体要执行哪些按需取用。更详细的可以参考 https://www.cnblogs.com/iancloud/p/15089035.html



# 重置iptables
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
# 删除加入的节点
kubectl drain k8s-node-1 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-node-1
# admin reset
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
# 删除自动生成和init的时候的配置
rm -rf /var/lib/cni/ $HOME/.kube/config
复制代码


其它



sudo apt-get --purge remove kubeadm kubectl kubelet
复制代码

阿里云服务器遇到的坎坷经历

在阿里云买了 3 台 2 核 4G 的服务器,但是脑抽选了不同的地域,结果内网无法联通。然后试图用外网 IP 做集群,走上了不归路,浪费了我四五天的时间。


根本原因是现在的云厂商外网 IP 没有绑定在网卡上,通过 ifconfig 命令查看没有外网的网卡和对应 IP。


在网上找了一些处理方法,只说了一半就没下文了,除非对网络这块特别熟,知道如何配置 2 层和 3 层网络,否则搞不定的。


最新方法是考虑 k3s,这个以后再折腾吧。

部署基于公网的 k8s 集群

参考链接: https://zhuanlan.zhihu.com/p/74134318


里面给出两种解决思路:1 虚拟网卡 2 init 过程中调整 etcd 但是后续使用的时候都会有问题。


可行的方案是 k3s

删除已经安装网络插件的方法

.sh 文件 https://github.com/kubeovn/kube-ovn/blob/master/dist/images/cleanup.sh


删除 flannel



# 停止服务
systemctl stop flanneld
# 查看网卡
ip addr s flannel.1
# 停止并删除vxlan
ifconfig flannel.1 down
ip link del flannel.1
# 再次查看
ip addr s flannel.1
复制代码


发布于: 2021 年 10 月 20 日阅读数: 13
用户头像

追风少年

关注

昨夜雨疏风骤,却道代码依旧。 2018.11.13 加入

非典型性程序员一枚,某互联网大厂资深开发,专注【Java技术领域、分布式技术领域、云原生技术实践】,喜欢分享金融和日常生活。 对每一行文字负责,对每一行代码负责。欢迎来踩

评论

发布
暂无评论
k8s集群安装经历