k8s单节点部署(仅master)
该文章仅应对特殊场景,并记录了本人的所有操作以及部署过后所遇到的问题,部分问题是后续遇到补充上的高可用和弹性:确保应用程序在集群中的多个节点上高可用性,并自动重新部署失败的容器。自动化容器部署:采用声明式的配置模型(Pod)来定义应用程序的容器化部署。服务发现和负载均衡:内建的服务发现机制和负载均衡,简化服务之间的通信和流量分配。水平扩展和自动伸缩:根据负载情况自动调整副本数量,实现应用程序的水平
前言
该文章仅应对特殊场景,并记录了本人的所有操作以及部署过后所遇到的问题,部分问题是后续遇到补充上的
一、什么是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
更多推荐
所有评论(0)