前言

该文章仅应对特殊场景,并记录了本人的所有操作以及部署过后所遇到的问题,部分问题是后续遇到补充上的

一、什么是k8s?

Kubernetes 是一个灵活、可扩展和功能强大的容器编排和管理平台,它可以帮助开发者简化应用程序的部署与管理,提高应用程序的可靠性和可维护性,以下是它的一些特点:

  • 高可用和弹性:确保应用程序在集群中的多个节点上高可用性,并自动重新部署失败的容器。
  • 自动化容器部署:采用声明式的配置模型(Pod)来定义应用程序的容器化部署。
  • 服务发现和负载均衡:内建的服务发现机制和负载均衡,简化服务之间的通信和流量分配。
  • 水平扩展和自动伸缩:根据负载情况自动调整副本数量,实现应用程序的水平扩展和自动伸缩。
  • 存储管理:提供多种存储选项,支持容器存储卷挂载和各种存储插件。
  • 配置和密钥管理:方便的配置管理机制,支持环境变量和配置文件传递,以及安全的密钥和证书管理。
  • 扩展机制和插件:丰富的插件生态系统,让开发者可以定制和扩展功能,编写自己的控制器和网络插件。

具体详情以及使用可以私下了解,这里不做过多解释

二、使用步骤

1.环境准备

关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld

关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config 
setenforce 0

关闭swap
swapoff -a  $ 临时
vim /etc/fstab  $ 永久
$ 将这一行注释
# /dev/mapper/centos-swap swap                    swap    defaults        0 0

将桥接的IPv4流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 加载内核模块
modprobe br_netfilter
lsmod | grep br_netfilter

2.docker安装

2.1.设置yum源

# base repo
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.bak
curl -o CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/CentOS-Base.repo

# docker repo
curl -o docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# k8s repo
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# update cache
yum clean all  
yum makecache  
yum repolist

2.2.安装docker

查看docker现有版本 并进行排序
yum list docker-ce --showduplicates | sort -r

根据需要安装所需版本的docker,我这里是19.03.9版本,可以根据自己的需求更换
yum install docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io -y

启动docker 并将其设置成开机自启
systemctl start docker
systemctl enable docker

配置镜像加速
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
EOF

systemctl daemon-reload
systemctl restart docker

#Docker中国区官方镜像
https://registry.docker-cn.com
#网易
http://hub-mirror.c.163.com
#ustc 
https://docker.mirrors.ustc.edu.cn

3.安装kubeadm、kubelet和kubectl(根据需求 指定版本号 如果不指定 默认拉取最新的版本)

yum -y  install kubelet-1.20.5 kubeadm-1.20.5 kubectl-1.20.5
systemctl enable kubelet

#可以使用kubelet --version、kubeadm version 和 kubectl version 命令来验证安装的版本是否正确。
#安装kubelet 后会在/etc下生成文件目录/etc/kubernetes/manifests/

4.部署k8s master

注意项:IP填写成自己主机master的IP,版本号要跟上一步安装的版本要一致

kubeadm init \
  --apiserver-advertise-address=192.168.100.69 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.20.5 \
  --service-cidr=10.1.0.0/16 \
  --pod-network-cidr=10.244.0.0/16\
  --ignore-preflight-errors=NumCPU

添加环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf 

通过命令可以看到master节点处于NotReady状态,coredns 处于pending状态,这是因为我们还没有安装网络插件

5.安装网络插件

下载配置文件:下载calico的yaml文件
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

查看一下Calico版本是多少:
cat calico.yaml | grep image

修改calico.yaml:
vim calico.yaml
    ## name取消注释就可以,value改成第4步中的pod-network-cidr的IP:10.244.0.0/16
    ## 在vi里面搜一下“/192.168”就可以找到这个地方。

创建Calico:
kubectl apply -f calico.yaml

再次查看K8s组件,就可以看到全部起来了:(需要一些时间 拉取镜像比较慢)
kubectl get pod -n kube-system

错误总结

问题:第3第4步版本拉取不一致导致出现

this version of kubeadm only supports deploying clusters with the control plane version >= 1.27.0. Current version: v1.20.5 To see the stack trace of this error execute with --v=5 or higher

解决方法:移除后指定对应版本

yum  remove -y kubelet kubeadm kubectl

yum -y  install kubelet-1.20.5 kubeadm-1.20.5 kubectl-1.20.5

问题:因为第4步环境变量设置的是临时的,重启或其他一些行为就会导致这个问题

The connection to the server localhost:8080 was refused - did you specify the right host or port?

 解决方法:设置永久环境变量

vim  /etc/profile

export KUBECONFIG=/etc/kubernetes/admin.conf

source /etc/profile

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐