k8s集群安装经历 - InfoQ 写作平台
source link: https://xie.infoq.cn/article/2e90c6199b93777f1cbf77e12
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
k8s 集群安装经历
总体上分为三个步骤:
机器环境。可以选择本地机器、虚拟机、云环境。我尝试过虚拟机和云服务的集群搭建。虚拟机要注意配置好两块网卡,做到内网互通,外网可访问即可。
安装 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
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
版权声明: 本文为 InfoQ 作者【追风少年】的原创文章。
原文链接:【https://xie.infoq.cn/article/2e90c6199b93777f1cbf77e12】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
追风少年
昨夜雨疏风骤,却道代码依旧。 2018.11.13 加入
非典型性程序员一枚,某互联网大厂资深开发,专注【Java技术领域、分布式技术领域、云原生技术实践】,喜欢分享金融和日常生活。 对每一行文字负责,对每一行代码负责。欢迎来踩
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK