K8s 集群部署
前言
学习了黑马K8s,首先跟着视频部署K8s,写下笔记
转至 原文链接
整合黑马老师笔记
一、部署k8s的两种方式:
目前生产部署Kubernetes集群主要有两种方式:
一 kubeadm
- Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
二 进制包
- 从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
本文采用kubeadm的方式搭建集群。
二、环境准备
在开始之前,部署Kubernetes 集群机器需要满足以下几个条件:
- 一台或多台机器,操作系统CentOS7.x-86_x64
- 硬件配置:2GB 或更多RAM,2 个CPU 或更多CPU,硬盘30GB 或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止swap 分区
k8s-master:192.168.100.10
k8s-node1:192.168.100.11
k8s-node2:192.168.100.12
三、初始化准备配置
检查操作系统的版本
# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
[root@master ~]# cat /etc/redhat-release
Centos Linux 7.5.1804 (Core)
安装环境准备:下面的操作需要在所有的节点上执行。
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
禁用iptable和firewalld服务
kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
# 1 关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld
# 2 关闭iptables服务
systemctl stop iptables
systemctl disable iptables
关闭swap
swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
添加hosts
cat >> /etc/hosts << EOF
192.168.100.10 k8s-master
192.168.100.11 k8s-node1
192.168.100.12 k8s-node2
EOF
将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
修改dns解析 否则可能无法拉取docker镜像
vi /etc/resolv.conf
#改为 :
nameserver 8.8.8.8
nameserver 114.114.114.114
时间同步
kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间
企业中建议配置内部的会见同步服务器
老师方式
# 启动chronyd服务
[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# date
使用老师方式无法正常同步,使用如下方式
yum install -y ntpdate
ntpdate cn.pool.ntp.org
虚拟机不管关机还是挂起,每次重新操作都需要更新时间进行同步。
四、安装 Docker、kubeadm、kubelet【所有节点】
安装docker:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker
配置镜像下载加速器:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl restart docker
docker info #查看docker信息,进行确认
添加阿里云软件源:
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm、kubelet、kubectl:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
五、部署k8s-master【master执行】
kubeadm init \
--apiserver-advertise-address=192.168.100.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
- apiserver-advertise-address 集群通告地址
- image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
- kubernetes-version K8s版本,与上面安装的一致
- service-cidr 集群内部虚拟网络,Pod统一访问入口
- pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
初始化之后,会输出一个join命令,先复制出来,node节点加入master会使用。
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:
kubeadm token create --print-join-command
六、部署容器网络 (master执行)
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
下载YAML:
https://docs.projectcalico.org/manifests/calico.yaml
下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定的一样。
修改完后文件后,进行部署:
kubectl apply -f calico.yaml
kubectl get pods -n kube-system #执行结束要等上一会才全部running
七 部署测试
部署Nginx:
创建一个nginx服务
kubectl create deployment nginx --image=nginx:1.14-alpine
暴露端口
kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
查看服务
kubectl get pod,svc
完成 !
失败排查 :
kubectl describe pod xxxxx
服务器重启后报错 :
W1208 17:40:31.554144 12505 loader.go:221] Config not found: /root/admin.conf
The connection to the server localhost:8080 was refused - did you specify the right host or port?
Master节点出现这个报错:
首先需要检查Master安装完Kubernetes后是否执行了下面命令。需要注意到是:如果整个过程都是在普通用户下使用sudo安装,则仍然需要在普通用户下执行了下面命令;如果整个过程都在root用户下安装,则还在root用户下执行了下面命令。
mkdir -p $HOME/.kube
#root用户下执行不需要加sudo
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
如果执行了,就到用户目录下检查是否有.kube文件夹,文件夹中是否有config文件,如果都有还是报错,就需要执行下面命令把它加入到环境变量中:
export KUBECONFIG=$HOME/.kube/config
Node节点出现这个报错:
kubectl命令需要使用kubernetes-admin来运行,所以需要将主节点中的/etc/kubernetes/admin.conf文件拷贝到从节点用户目录下,然后配置环境变量:文章来源:https://www.toymoban.com/news/detail-444576.html
#在Master节点运行下面命令将admin.conf文件拷贝到从节点
sudo scp /etc/kubernetes/admin.conf root@192.168.63.131:~
#在Node节点运行下面命令配置环境变量
export KUBECONFIG=$HOME/admin.conf
#使生效
source /etc/profile
重启后任然报错 :文章来源地址https://www.toymoban.com/news/detail-444576.html
[root@slave1 ~]# kubectl get pod,svc
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[root@slave1 ~]# mkdir -p $HOME/.kube
[root@slave1 ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@slave1 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@slave1 ~]# source ~/.bash_profile
[root@slave1 ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@slave1 ~]# kubectl get pod
总结
到了这里,关于K8s 集群部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!