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 firewalldsystemctl disable firewalld# 永久关闭selinuxsed -i 's/enforcing/disabled/' /etc/selinux/config# 永久关闭swapswapoff -ased -ri 's/.*swap.*/#&/' /etc/fstab# 修改/etc/hosts192.168.100.10 k8s-master192.168.100.11 k8s-node1192.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
service network restart 重启网络服务
3、K8S安装
安装docker、kubeadm、kubelet,kubectl
cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
修改主机名称
配置master的时候就执行这条hostnamectl set-hostname k8s-masterhostname $hostname配置node1的时候就执行这条hostnamectl set-hostname k8s-node1hostname $hostname配置node2的时候就执行这条hostnamectl set-hostname k8s-node2hostname $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-cesystemctl start docker # 启动Dockersystemctl enable docker # 设置自动启动
#启动chronyd服务systemctl start chronyd#设置开机自启systemctl enable chronyd#验证时间是否一致date
安装kubelet kubeadm和kubectl
#安装kubelet、kubeadm和kubectlyum 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 里面
systemctl 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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
5、Calico安装
这里我只在master主机上安装了
安装网络插件(Calico)
这里要对应版本 自行替换版本号
Kubernetes版本 vs Calico 版本1.18、1.19、1.20 3.181.19、1.20、1.21 3.191.19、1.20、1.21 3.201.19、1.20、1.21 3.201.21、1.22、1.23 3.221.21、1.22、1.23 3.231.22、1.23、1.24 3.24mkdir testcd testcurl 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 #重新生成tokenkubeadm 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: ServiceapiVersion: v1metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboardspec:ports:- port: 443targetPort: 8443nodePort: 32000selector:k8s-app: kubernetes-dashboardtype: NodePort---
加载配置文件
kubectl apply -f recommended.yamlkubectl 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# 获取用户Tokenkubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
访问master 或者 node1 和 node2 任意IP + 配置的端口即可访问
如果在访问的时候出现下图中的错误,这个时候你会发现很无奈 因为无论你怎么配置他都进不去,不要慌。
先把输入法切换到英文然后点击网站页面的空白处,不用选中任何东西输入:thisisunsafe
然后回车,你会发现可以访问了,很神奇。
输入前
输入后,惊喜的发现可以访问,接着输入你的token。
因为我没有部署任何资源,所以这里是空的。
一个"赞" 和 "在看",将是对作者最大的鼓励。
点击下方关注我!!!