centOS7.9部署k8s
centOS7安装部署k8s+Docker
centOS7.9部署k8s
k8s安装环境
至少准备三台centos服务器,其中一台为master节点,两台work节点;centos系统版本为7.5或以上版本;我这里使用的是7.9,除此之外,还需要一些额外的条件
*.每台主机至少具备2G内存;2核CPU
*.一定关闭防火墙
1、时间同步
k8s要求集群中的节点必须精确一致,所以直接使用chronyd从网络同步时间
# 启动chronyd服务
systemctl start chronyd
# 设为开机自启
systemctl enable chronyd
# 查看当前时间
date
2、重新设置主机名
*这里有重要的一步,请记住自己master和node之间通信的ip,如我的master的ip为172.26.39.191,node的ip为:172.26.39.192. 请确保使用这两个ip在master和node上能互相ping通,这个master的ip 172.26.39.191接下来配置k8s的时候需要用到。
# 主节点
hostnamectl set-hostname master
# 工作节点1
hostnamectl set-hostname node1
# 工作节点2
hostnamectl set-hostname node2
$ vi /etc/hosts
添加如下内容:
192.26.39.191 master
192.26.39.192 node1
192.26.39.192 node2
3、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
4、禁用SELINUX
# 临时禁用,重启后复原,也可以用 setenforce Permissive 命令,效果是一样的
setenforce 0
# 永久禁用,
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
5、关闭swap分区
#临时关闭swap分区, 重启失效;
swapoff -a
#永久关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
6、将桥接的IPV4流量传递到iptables 的链
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master ~]# sysctl --system
7、配置ipvs功能
在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
-
安装ipset和ipvsadm
sudo yum install -y yum-utils
[root@master ~]# yum install ipset ipvsadmin -y
2.添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
二、安装docker
1、卸载原docker
# 查看已安装的docker
yum list installed | grep docker
# 卸载docker相关组件
yum -y remove docker*
# 除了docker之外,也需要将containerd.io 卸载,这是容器相关的组件
docker -y remove containerd.io.x86_64
# 删除docker目录
rm -rf /var/lib/docker
2、使用国内的阿里云镜像仓
# 使用国内的阿里云镜像仓库-- 比较快 ,建议使用这个
[root@master ~]# yum-config-manager --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
出现
问题解决:这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了
3、安装指定版本的docker
安装19.03.13以下的,版本太高,后期会出现kubeadm不兼容的的问题
[root@master ~]# yum install \
docker-ce-19.03.2 docker-ce-cli-19.03.2 containerd.io-1.4.4 -y
4、使用systemd代替cgroupfs、以及配置仓库镜像地址
docker在默认情况下使用Cgroup Driver 为cgroupfs,
而k8s推荐使用systemd来代替cgroupfs,
所以在/etc/docker/daemon.json内加入以下内容,如果没有这个文件,手动创建一个
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://q2hy3fzi.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
报错:
“/etc/docker/daemon.json” E212: Can’t open file for writing
解决方案:
cd /etc
mkdir docker
cd docker
vi daemon.json
5、启动docker
# 第一种:启动docker
systemctl start docker
# 第二种:启动docker并设为开机启动
systemctl enable docker --now
#查看docker版本
docker -v
docker version
docker --version
安装k8s
1、添加阿里云YUM软件源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
2、EOF安装kubeadm,kubelet和kubectl
-
指定版本
yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1 --disableexcludes=kubernetes
-
最新版本
yum install -y kubelet kubeadm kubectl
3、添加配置
在 /etc/sysconfig/kubelet 文件中加入以下内容、
vi /etc/sysconfig/kubelet
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
4、启动kubelet
# 开机自动启动
systemctl enable --now kubelet
5、使用kubeadm引导集群
初始化主节点之前,需要先下载一些组件,但是这些组件都在官网上,所以我们国内是无法下载的,所以一我们将官网的镜像改成阿里云的镜像,以下命令执行后会在当前目录得到一个 images.sh 的脚本文件,执行后会在docker中下载一些需要的组件,理论上这些只需要在主节点上执行,但是为了保险起见,我们在所有节点都安装一下
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.23.1
kube-proxy:v1.23.1
kube-controller-manager:v1.23.1
kube-scheduler:v1.23.1
coredns:1.7.5
etcd:3.4.13-0
pause:3.2
kubernetes-dashboard-amd64:v1.10.0
heapster-amd64:v1.5.4
heapster-grafana-amd64:v5.0.4
heapster-influxdb-amd64:v1.5.2
pause-amd64:3.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
done
EOF
设置可执行权限并执行脚本
chmod +x ./images.sh && ./images.sh
四.部署Kubernetes Master
1、初始化主节点
kubeadm init \
--apiserver-advertise-address=172.26.38.191 \
--control-plane-endpoint=master \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
安装过程需等待几分钟
这样就算成功了
查看镜像
2、初始化后续
根据上面的提示继续进行配置,如果需要使用集群,还需要执行以下命令,
记住,这里的命令是从第一步初始化成功后拷贝过来的命令,应该拷贝你的命令来执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
下面就可以直接使用kubectl命令了
kubectl get node
3、安装插件
1、下载
curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml
2、查看是否部署成功
kubectl get pods -n kube-system
再次查看node,可以看到状态为ready
如果安装失败,执行下面的命令
kubeadm reset
rm -rf $HOME/.kube
五、work节点加入集群
向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
复制上面命令,在node节点上执行
[root@master ~]# kubeadm join 172.26.38.191:6443 --token xrkax8.7izalcr2y9ggf5ph \
--discovery-token-ca-cert-hash sha256:d8167c9353369f476016f75ba176b3ff6b5e7ef57e614bcf581caa368082122d
出现了这个问题,若无,请忽略,进行下一步
解决:删除残留文件
rm -f /etc/kubernetes/kubelet.conf #删除k8s配置文件
rm -f /etc/kubernetes/pki/ca.crt #删除K8S证书
端口占用提示:[ERROR Port-10250]: Port 10250 is in use
解决:查看占用进程,然后杀掉,然后再加入
sudo yum install -y net-tools -q #安装相关工具(-q:静默安装)
然后在查看端口
netstat -ntpl | grep 10250
可以看出,是K8S占用了,那就尝试重启服务看看能不能解决
systemctl restart kubelet
再次查看端口就没有了
最后再次执行 kubeadm join.................
执行成功
如果token忘记了,则可以通过如下操作:
1)查看token,如果token失效,则重新生成一个
$ kubeadm token list
$ kubeadm token create
2)获取ca证书sha256编码hash值
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
六、部署dashboard
1、部署
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
2、设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
type: ClusterIP 改为 type: NodePort
kubectl get svc -A |grep kubernetes-dashboard
找到端口,在安全组放行
访问: https://集群任意IP:端口 https://120.27.139.90:30051
3、创建访问账号
#创建访问账号,准备一个yaml文件; vi dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
然后执行
kubectl apply -f dash.yaml
4、令牌访问
#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
然后写入到token里面
5、界面
后面会继续发布k8s自动化部署项目的文章
更多推荐
所有评论(0)