3

k8s集群安装经历 - InfoQ 写作平台

 2 years ago
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 集群安装经历

用户头像
追风少年
关注
发布于: 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.confbr_netfilterEOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsudo sysctl --system
# 证书安装的时候官方文档用的是k8s.io的镜像,这里改成阿里云的镜像。sudo apt-get updatesudo apt-get install -y apt-transport-https ca-certificates curlsudo 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 mainEOF

Update apt package index, install kubelet, kubeadm and kubectl

sudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo 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/configAlternatively, if you are the root user, you can run:  export KUBECONFIG=/etc/kubernetes/admin.confYou 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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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 ciliumhelm 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.yamlfor 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

# 重置iptablesiptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X# 删除加入的节点kubectl drain k8s-node-1 --delete-local-data --force --ignore-daemonsetskubectl delete node k8s-node-1# admin resetkubeadm resetsystemctl daemon-reloadsystemctl 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# 停止并删除vxlanifconfig flannel.1 down ip link del flannel.1# 再次查看ip addr s flannel.1
划线
评论
复制
发布于: 2021 年 10 月 20 日阅读数: 153

版权声明: 本文为 InfoQ 作者【追风少年】的原创文章。

原文链接:【https://xie.infoq.cn/article/2e90c6199b93777f1cbf77e12】。

本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。

用户头像

追风少年

关注

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK