前言
总体上分为三个步骤:
机器环境。可以选择本地机器、虚拟机、云环境。我尝试过虚拟机和云服务的集群搭建。虚拟机要注意配置好两块网卡,做到内网互通,外网可访问即可。
安装 docker
安装 k8s 集群
版本建议
Go:1.17 Docker:20.10.8 K8s:1.22.0 ubuntu 20.04
安装 docker
参考官方文档 https://docs.docker.com/engine/install/ubuntu/
运行 helloWorld
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
复制代码
设置开机启动
k8s 安装
切换 root 用户
前置工作
配置流量转发
# 开机启动的时候,会自动在 /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
复制代码
字段说明
查看安装日志
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。接下来要安装网络插件。
安装网络插件
参考网上的方法
# 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
复制代码
评论