注意
k8s集群第一次搭建的话是麻烦且又繁琐的,大家不要着急,静下心来,一步一步搭建即可
linux网关及虚拟机下载不会弄的问题请详细看 linux的搭建及网关配置 这篇文章【也在此专栏】
环境规划
硬件环境
cpu 至少2核
内存 至少3G
硬盘 至少40G
软件环境
操作系统 CentOS7.9_x64
内核 4.x以上
Kubernetes 1.23
集群节点
master 192.168.168.66.104
node1 192.168.66.105
编辑
环境搭建
关闭防火墙
温馨提示:生产环境中可不要这样做哦~~~
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
vim /etc/selinux/config
SELINUX=disabled
配置阿里云yum源
1安装wget(如果已经安装了则省略)
yum install -y wget
2备份/etc/yum.repos.d/CentOS-Base.repo文件
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.back
3下载阿里云的Centos-7.repo文件
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4重新加载yum
yum clean all
yum makecache
5检查配置的源是否是阿里的
cat /etc/yum.repos.d/CentOS-Base.repo
安装docker
安装
注意
如果你在 docker 运行期间操作了防火墙[启动或关闭]必须重启docker
前置条件
硬件条件:Centos【7.5】 Linux内核【3.8】
cpu【2核】内存【至少2G】硬盘【至少20G】
安装
yum install -y docker
启动:
systemctl start docker
设置自启动:
systemctl enable docker
重启:
systemctl restart docker
查看信息
查看版本:
docker -v
检查服务:
systemctl status docker.service
开启远程访问
编辑配置文件
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \ --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \ --default-runtime=docker-runc \ --exec-opt native.cgroupdriver=systemd \ --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \ --init-path=/usr/libexec/docker/docker-init-current \ --seccomp-profile=/etc/docker/seccomp.json \ $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $ADD_REGISTRY \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY \ $REGISTRIES
配置阿里镜像
配置阿里镜像
vim /etc/docker/daemon.json
{ "registry-mirrors": ["https://32xw0apq.mirror.aliyuncs.com"] }
生效配置
systemctl daemon-reload
重启
systemctl restart docker
升级系统内核
安装内核
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
检查启动项
grep initrd16 /boot/grub2/grub.cfg
设置开机画面
grub2-set-default 0
重启
reboot
网桥过滤和地址转发
vi /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-arptables = 1 net.ipv4.ip_forward=1 net.ipv4.ip_forward_use_pmtu = 0
#生效命令
sysctl --system
#查看效果
sysctl -a|grep "ip_forward"
时间同步
目的:master和node要时间同步通信
注意:升级完内核可以不用安装
#安装软件
yum -y install ntpdate
#向阿里云服务器同步时间
ntpdate time1.aliyun.com
#删除本地时间并设置时区为上海
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#查看时间
date -R || date
hosts配置
vi /etc/hosts
添加如下内容
192.168.66.104 k8s-master 192.168.66.105 k8s-node1
禁用swap分区
# 临时关闭【重启电脑后需要重新关闭】
swapoff -a
# 确认关闭:若swap行都显示 0 则表示关闭成功
free -m
初始化集群-安装软件
K8s镜像切换成国内源
vi /etc/yum.repos.d/kubernetes.repo
[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
更新缓存
yum clean all
yum -y makecache
安装kubeadm、kubelet、kubectl
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
设置kubelet开机自启动
systemctl enable kubelet
初始化集群-master节点
创建集群
注意:修改下面命令汇总的master的ip并保证禁用swap分区
kubeadm init \--apiserver-advertise-address=192.168.66.104 \--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
获取把node加入集群的命令
1.执行创建集群命令获得【24小时有效】
kubeadm join 192.168.66.104:6443 --token wwm1fr.9b8hrfcm7ezfen75 \--discovery-token-ca-cert-hash sha256:791eafd21cd938a945b0a9aca6b57f7b4f3a2f180404812a82eab7c934928c46
2.直接使用命令重新创建token快捷生成
kubeadm token create --print-join-command
创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看节点
kubectl get nodes
启动
systemctl restart kubelet.service
查看状态
systemctl status kubelet.service
初始化集群-Node节点
把node加入集群
注意:禁用swap分区
执行master节点获取的命令
部署容器网络【master】
Calico
Calico是一个纯三层的数据中心网络方案,是目前K8s主流的网络方案
修改并上传calico.yaml
找到以下内容并修改
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
部署容器网络
上传到master,在文件所在位置执行命令,执行完后docker会下载镜像安装到node节点上
kubectl apply -f calico.yaml
查看通信状态
kubectl get pods -n kube-system
部署Dashboard【master】
查询K8s版本与dashboard的兼容性
安装的K8s是1.23版本,因此选择v2.5.0的dashboard并下载相应版本的recommended.yaml配置文件
网址
下载配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
创建pod
kubectl apply -f recommended.yaml
查看容器状态
kubectl get pods -n kubernetes-dashboard
镜像拉不过来的话自己下【也可能是拉的码,等一下也可以】
docker pull mirror.baidubce.com/kubernetesui/dashboard:v2.5.0
dashboard-metrics-scraper-799d786dbf-nfwzv 1/1 Running 0 37m
kubernetes-dashboard-546cbc58cd-5dh7f 1/1 Running 0 37m
查看kubernetes-dashboard服务
kubectl get svc -n kubernetes-dashboard
注意
dashboard服务的namespace是kubernetes-dashboard,但是该服务的类型是ClusterIP,
不便于我们通过浏览器访问,因此需要改成NodePort型的。 需要删除现有的dashboard服务
删除现有的kubernetes-dashboard服务
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
创建新的服务配置文件
vim dashboard-svc.yaml
kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 selector: k8s-app: kubernetes-dashboard
创建新的服务
kubectl apply -f dashboard-svc.yaml
查看kubernetes-dashboard服务
kubectl get svc -n kubernetes-dashboard
dashboard-metrics-scraper ClusterIP 10.109.189.52 8000/TCP 42m
kubernetes-dashboard NodePort 10.102.72.102 443:31587/TCP 24s
创建管理员角色并访问控制面板【master】
创建配置文件
vim dashboard-svc-account.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dashboard-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kube-system roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
执行命令
kubectl apply -f dashboard-svc-account.yaml
获取token
kubectl get secret -n kube-system |grep admin|awk '{print $1}'
执行下面的命令生成token(maser)【记得替换命令里面token的内容】
kubectl describe secret dashboard-admin-token-tjdd6 -n kube-system|grep '^token'|awk '{print $2}'
访问控制台,选择token登录
查看端口号(kubernetes-dashboard)
kubectl get svc -n kubernetes-dashboard