Centos7搭建K8s
Centos7搭建K8s
声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系作者。 |
1、环境配置
安装就不写了,网上找吧,最好在安装的时候吧IP配置好,这样可以节省很多时间。
主机名 | ip | 系统版本 |
---|---|---|
k8s-master | 192.168.100.10 | Centos7.9.2009 |
k8s-node1 | 192.168.100.11 | Centos7.9.2009 |
k8s-node2 | 192.168.100.12 | Centos7.9.2009 |
我的网络模式为Net
2、系统配置
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 永久关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 永久关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 修改/etc/hosts
192.168.100.10 k8s-master
192.168.100.11 k8s-node1
192.168.100.12 k8s-node2
#配置阿里云软件源 因为默认是国外的 访问很慢
# 移除centos原本的软件源
rm -rfv /etc/yum.repos.d/*
# 拉取阿里云的软件源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
这里如果出现未知的错误,首先检查自己的网络是不是能ping通外网
如果不能
vi /etc/sysconfig/network-scripts/ifcfg-ens33 #编辑网络配置文件
我的网络配置
我的DNS配置
vi /etc/resolv.conf
检查一下是不是少了什么和多了什么,IP 网关 DNS
service network restart 重启网络服务
3、K8S安装
安装docker、kubeadm、kubelet,kubectl
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
修改主机名称
配置master的时候就执行这条
hostnamectl set-hostname k8s-master
hostname $hostname
配置node1的时候就执行这条
hostnamectl set-hostname k8s-node1
hostname $hostname
配置node2的时候就执行这条
hostnamectl set-hostname k8s-node2
hostname $hostname
配置阿里云Docker-ce源
# 安装yum管理工具
yum install -y yum-utils
# 配置阿里云的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
常用包安装
yum install vim bash-completion net-tools gcc -y
安装Docker
时间同步yum install docker-ce
systemctl start docker # 启动Docker
systemctl enable docker # 设置自动启动
#启动chronyd服务
systemctl start chronyd
#设置开机自启
systemctl enable chronyd
#验证时间是否一致
date
安装kubelet kubeadm和kubectl
#安装kubelet、kubeadm和kubectl
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
#设置kubelet开机自启
systemctl enable kubelet && systemctl start kubelet
4、K8S部署
部署k8s-master
在安装后看一下版本号 替换下面的version的位置
--apiserver-advertise-address= 这个为自己的IP
这里如果是master就是master的IP node1就是node1的IP 自行替换
安装后就可以看到版本号 自行替换
--kubernetes-version 版本号
kubeadm init --apiserver-advertise-address=192.168.100.10 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.23.0 --service-cidr=10.10.10.0/24 --pod-network-cidr=10.20.20.0/24 --ignore-preflight-errors=all
正常配置后会看到下图
记住这条命令node加入集群的时候会用到
master
kubeadm join 192.168.100.10:6443 --token ldojrs.if0qllicnxvhgbfz \
--discovery-token-ca-cert-hash sha256:8444adb487db5d7f9949c9709c1d2c093355ad6e7c7a03e482a5ff431d8f660a
解决报错(如果没有报错请跳过) errorIt seems like the kubelet isn't running or healthy.
打开文件/usr/lib/systemd/system/docker.service,
ESC+: 然后/ExecStart 直接定位到位置
如下图,将 --exec-opt native.cgroupdriver=systemd 添加到execStart 里面
重新加载配置重启dockersystemctl daemon-reload && systemctl restart docker
这里如果是master就是master的IP node1就是node1的IP 自行替换
再次部署k8s
kubeadm init --apiserver-advertise-address=192.168.100.10 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.23.0 --service-cidr=10.10.10.0/24 --pod-network-cidr=10.20.20.0/24 --ignore-preflight-errors=all
拷贝认证文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5、Calico安装
这里我只在master主机上安装了
安装网络插件(Calico)
这里要对应版本 自行替换版本号
Kubernetes版本 vs Calico 版本
1.18、1.19、1.20 3.18
1.19、1.20、1.21 3.19
1.19、1.20、1.21 3.20
1.19、1.20、1.21 3.20
1.21、1.22、1.23 3.22
1.21、1.22、1.23 3.23
1.22、1.23、1.24 3.24
mkdir test
cd test
curl https://docs.projectcalico.org/archive/v3.23/manifests/calico.yaml -O
这里如果部署的时候报错了 请自己替换一下对应的版本3.22-3.24都试试 或许就不报错了
定义Pod网络
vim calico.yaml
这里可以使用 esc + : 然后输入 /CALICO_IPV4POOL_CIDR 直接定位到修改的位置
这里的IP要跟--pod-network-cidr的一样 10.20.20.0/24
加速Docker镜像
cat calico.yaml |grep 'image:'
sed -i 's#docker.io/##g' calico.yaml
部署
kubectl apply -f calico.yaml 需要等一会儿全部runing后
kubectl get pods -n kube-system
等待一会儿就部署完成了
6、Node加入集群
将Node加入集群
kubeadm join 192.168.100.10:6443 --token ldojrs.if0qllicnxvhgbfz \
--discovery-token-ca-cert-hash sha256:8444adb487db5d7f9949c9709c1d2c093355ad6e7c7a03e482a5ff431d8f660a
如果有报错[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
原因是已经加入过了需要先清除一下 再node节点 清除后再次加入
kubeadm reset
如果忘了可以在master主机上 输入下面的命令
kubeadm token create --print-join-command
加入后可以在master上看到
kubectl get nodes
这个Token是有时间的一般来说是24小时,当然这个各个版本可能都不太一样,具体版本具体分析,也可以生成永久Token。
kubeadm token create --print-join-command #重新生成token
kubeadm token create --ttl 0 --print-join-command #生成永久token
当然这个永久Token是有风险的,这里我使用临时Token,过期了就重新生成。
7、Dashboard部署
Dashboard Web UI界面可以管理K8s,这里使用镜像加速地址
wget https://raw.staticdn.net/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml --no-check-certificate
默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部
编辑配置文件
vim recommended.yaml
nodePort端口范围为30000-32767,并添加type:NodePort
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 32000
selector:
k8s-app: kubernetes-dashboard
type: NodePort
---
加载配置文件
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard #需要等待加载
master创建service account并绑定默认cluster-admin管理员集群角色
# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
访问master 或者 node1 和 node2 任意IP + 配置的端口即可访问
如果在访问的时候出现下图中的错误,这个时候你会发现很无奈 因为无论你怎么配置他都进不去,不要慌。
先把输入法切换到英文然后点击网站页面的空白处,不用选中任何东西输入:thisisunsafe
然后回车,你会发现可以访问了,很神奇。
输入前
输入后,惊喜的发现可以访问,接着输入你的token。
因为我没有部署任何资源,所以这里是空的。
一个"赞" 和 "在看",将是对作者最大的鼓励。
点击下方关注我!!!