前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernates集群搭建

kubernates集群搭建

作者头像
用户1215919
发布2021-12-28 12:48:33
3230
发布2021-12-28 12:48:33
举报
文章被收录于专栏:大大的微笑大大的微笑

版本

  • CentOS7
  • Docker 18.09.0
  • kubeadm-1.14.0-0
  • kubelet-1.14.0-0
  • kubectl-1.14.0-0
  • calico:v3.9
依赖更新及安装
代码语言:javascript
复制
yum -y update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
docker安装
上一篇写的docker的博客内容:

https://cloud.tencent.com/developer/article/1926368

配置hosts文件
代码语言:javascript
复制
# 设置master的hostname,并且修改hosts文件
sudo hostnamectl set-hostname m
#两个slave
sudo hostnamectl set-hostname w1
sudo hostnamectl set-hostname w2

# vi /etc/hosts(三台节点都配置一下)
master的ip m
slave1的ip w1
slave2的ip w2
# 测试
ping m
ping w1
ping w2
系统基础配置
代码语言:javascript
复制
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 关闭selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭swap
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
# 配置iptables的ACCEPT规则
	iptables -F && iptables -X && iptables \
    -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
# 设置系统参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
安装kubeadm, kubelet及kubectl
  • 配置yum源
代码语言:javascript
复制
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  • 安装kubeadm&kubelet&kubectl
代码语言:javascript
复制
yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0
  • 注意
代码语言:javascript
复制
#因为我这边报了如下错误,所以还需要安装: kubernetes-cni- 0.7.5:
Error: Package: kubelet-1.14.0-0.x86_64 (kubernetes)
           Requires: kubernetes-cni = 0.7.5
           Available: kubernetes-cni-0.3.0.1-0.07a8a2.x86_64 (kubernetes)
               kubernetes-cni = 0.3.0.1-0.07a8a2
           Available: kubernetes-cni-0.5.1-0.x86_64 (kubernetes)
               kubernetes-cni = 0.5.1-0
           Available: kubernetes-cni-0.5.1-1.x86_64 (kubernetes)
               kubernetes-cni = 0.5.1-1
           Available: kubernetes-cni-0.6.0-0.x86_64 (kubernetes)
               kubernetes-cni = 0.6.0-0
           Available: kubernetes-cni-0.7.5-0.x86_64 (kubernetes)
               kubernetes-cni = 0.7.5-0
           Available: kubernetes-cni-0.8.6-0.x86_64 (kubernetes)
               kubernetes-cni = 0.8.6-0
           Installing: kubernetes-cni-0.8.7-0.x86_64 (kubernetes)
               kubernetes-cni = 0.8.7-0
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

但是,如果单独安装kubernetes-cni- 0.7.5之后,继续执行的话会发现又有其他的错误如下所示,始终版本不一致,但是我安装的时候明明指定了1.14.0的版本,反反复复检查之后发现原来直接安装kubernetes-cni- 0.7.5的时候会默认给你安装kubelet,显然不是我们想要的结果:

代码语言:javascript
复制
the kubelet version is higher than the control plane version. 
This is not a supportted version skew 
and may lead to a malfunctional cluster.
kubelet v1.9.3, control plane 1.14.0,
  • 如果出现上述问题请执行
代码语言:javascript
复制
yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0  kubernetes-cni-0.7.5

systemctl restart docker

systemctl enable kubelet && systemctl start kubelet

  • 查看kubeadm使用的镜像
代码语言:javascript
复制
kubeadm config images list
  • 解决国外镜像不能访问的问题
代码语言:javascript
复制
vi kubeadm.sh
---------------------------
#!/bin/bash
set -e
KUBE_VERSION=v1.14.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
CORE_DNS_VERSION=1.3.1
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})
for imageName in ${images[@]} ; do
	docker pull $ALIYUN_URL/$imageName
	docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
	docker rmi $ALIYUN_URL/$imageName
done
  • 运行脚本并查看镜像
代码语言:javascript
复制
sh ./kubeadm.sh

docker images 
  • 初始化master
代码语言:javascript
复制
kubeadm init --kubernetes-version=1.14.0 \
    --apiserver-advertise-address=master IP \
    --pod-network-cidr=10.244.0.0/16 

出现如下内容则表示初始化成功

代码语言:javascript
复制
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

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 xxxxxxx:6443 --token xxxxxx \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxx
  • 根据日志提示依次执行
代码语言:javascript
复制
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 查看pod
代码语言:javascript
复制
kubectl get pods -n kube-system

可以看到coredns一直处于pending状态,这是因为还未安装网络插件

  • calico网络插件(也可以选择其他官方推荐的)
代码语言:javascript
复制
docker pull calico/cni:v3.9.3
docker pull calico/pod2daemon-flexvol:v3.9.3
docker pull calico/node:v3.9.3
docker pull calico/kube-controllers:v3.9.3

可能会因为网络的原因导致失败,可以配置国内镜像地址

  • slave节点依次执行master初始化得到的内容
代码语言:javascript
复制
kubeadm join xxxxxxx:6443 --token xxxxxx \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxx

直接执行可能会出现如下内容,执行kubeadm reset再操作即可

代码语言:javascript
复制
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR FileAvailable--etc-kubernetes-bootstrap-kubelet.conf]: /etc/kubernetes/bootstrap-kubelet.conf already exists
	[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
  • 执行如下命令可以发现集群中已经存在的节点信息
代码语言:javascript
复制
kubectl get nodes
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 依赖更新及安装
    • docker安装
      • 上一篇写的docker的博客内容:
      • 配置hosts文件
      • 系统基础配置
      • 安装kubeadm, kubelet及kubectl
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档