OR博客
k8s入门(一)搭建简单的k8s集群
OrdinaryRoad
创建于:2021-09-25 16:47:55
0
18
86
0
使用vagrant在本地虚拟机搭建1master、1work的k8s集群,系统centos/8、默认网络插件:flannel、pod网段B类:172.20.0.0/16、svc网段A类:10.1.0.0/16
# 目标 1. 使用本地虚拟机搭建1master、1work的k8s集群 系统centos/8、默认网络插件:flannel、pod网段B类:172.20.0.0/16、svc网段A类:10.1.0.0/16 | ip | hostname | | -------------- | -------- | | 192.168.56.100 | master | | 192.168.56.101 | work1 | 2. 成功运行一个简单的web服务,并通过ingress访问 # 1. 环境准备 安装Vagrant # 2. 初始化虚拟机 ## 2.1 新建Vagrantfile文件,文件如下 ``` Vagrant.configure("2") do |config| (1..2).each do |i| config.vm.define "k8s-node#{i}" do |node| # 设置虚拟机的Box # 建议使用其他的,比如generic/centos8,磁盘空间70G,centos/8的磁盘只有10G,有坑 # 可以去https://app.vagrantup.com/boxes/search找 node.vm.box = "centos/8" # 设置虚拟机的主机名 # node.vm.hostname="k8s-node#{i}" # 这里有坑,注释掉,启动后进虚拟机手动修改 # 设置虚拟机的IP node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0" # 设置主机与虚拟机的共享目录 # node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share" # VirtaulBox相关配置 node.vm.provider "virtualbox" do |v| # 设置虚拟机的名称 v.name = "k8s-node#{i}" # 设置虚拟机的内存大小 v.memory = 2048 # 设置虚拟机的CPU个数 v.cpus = 2 end end end end ``` ## 2.2 启动虚拟机 ``` vagrant up ``` ## 2.3 虚拟机参数调优 ### 2.3.1 配置host 先登录到 k8s-node1 节点 ``` vagrant ssh k8s-node1 ``` 编辑 host 配置 ``` vi /etc/hosts ``` 添加 ``` 192.168.56.100 master 192.168.56.101 work1 ``` 设置hostname ``` hostnamectl set-hostname master ``` 对work1进行类似的操作 > 如果不想来回切换可以配置 2.3.7 ssh免密登录,使用 `ssh work1 "命令"` 对work1进行操作 ### 2.3.2 关闭防火墙 ```bash sudo systemctl stop firewalld.service sudo systemctl disable firewalld.service ``` ### 2.3.3 关闭swap - 临时关闭 ```bash sudo swapoff -a ``` - 永久关闭 把/etc/fstab中的swap注释掉 ```bash sudo sed -i 's/.*swap.*/#&/' /etc/fstab ``` ### 2.3.4 禁用selinux - 临时关闭 ```bash setenforce 0 ``` - 永久关闭 ```bash sudo sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config ``` ### 2.3.5 卸载podman centos8默认安装了podman容器,它和docker可能有冲突需要卸载掉 ```bash sudo yum remove podman ``` ### 2.3.6 时间同步 [CentOS8系统时间同步解决方法 - linuxTang - 博客园 (cnblogs.com)](https://www.cnblogs.com/tyjs09/p/15095139.html) ### 2.3.7 ssh免密登录(可选) [SSH 三步解决免密登录_jeikerxiao-CSDN博客_ssh免密登录](https://blog.csdn.net/jeikerxiao/article/details/84105529) # 2. 安装k8s ## 2.1 配置系统基本安装源 ```bash sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo ``` ## 2.2 添加K8S安装源 将如下内容保存到:/etc/yum.repos.d/kubernetes.repo ``` [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg ``` 由于目前阿里镜像中还没有CentOS8的kubernetes,但是可以使用CentOS7的安装包,所以上面是使用的kubernetes-el7-x86_64,如果有CentOS8的,则为kubernetes-el8-x86_64。 ## 2.3 安装Docker ```bash sudo yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install docker-ce ``` 启动 ```bash systemctl start docker systemctl enable docker ``` ### 2.3.1 配置镜像加速 为了docker加速pull,可以设置阿里云加速: 参考 [容器镜像服务 (aliyun.com)](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors) 镜像工具中的镜像加速器 1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档[docker-ce](https://yq.aliyun.com/articles/110806) 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 ```bash sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://08estd8l.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker ``` ### 2.3.2 修改dockerCgroup Driver > 不修改的话安装会出现Warning > > [WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. > > 出现[WARNING IsDockerSystemdCheck],是由于docker的Cgroup Driver和kubelet的Cgroup Driver不一致导致的,此处选择修改docker的和kubelet一致 查看docker信息: ```bash docker info | grep Cgroup ``` 可以看到驱动为Cgroup,需要改为systemd。 1. 编辑文件/usr/lib/systemd/system/docker.service,在ExecStart命令中添加 ```bash --exec-opt native.cgroupdriver=systemd ``` 2. 然后重启docker,再查看信息,可以看到已经变为systemd了 ```bash systemctl daemon-reload systemctl restart docker docker info | grep Cgroup ``` ## 2.4 安装kubectl、kubelet、kubeadm 安装kubectl、kubelet、kubeadm,设置kubelet开机启动,启动kubelet。 ```bash sudo yum install -y kubectl kubelet kubeadm sudo systemctl enable kubelet sudo systemctl start kubelet ``` 查看K8S版本 ```bash kubeadm version kubectl version --client kubelet --version ``` # 3. 初始化kubernetes集群 ## 3.1 初始化master节点 由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。 ```bash kubeadm init --apiserver-advertise-address=192.168.56.100 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=172.20.0.0/16 \ --ignore-preflight-errors=all \ --kubernetes-version=v1.21.0 ``` 上述命令执行成功后 ,保存以下命令,用于 `work1` 节点加入 `master` 节点 ```bash kubeadm join 192.168.56.100:6443 --token scyf66.3hliffdr1ki8pqy6 \ --discovery-token-ca-cert-hash sha256:8b49303c81a06cbf23177f801257990f71c26736b7139e837a624263329c4537 ``` 如果忘记保存可以使用这个查看 ```bash kubeadm token create --print-join-command ``` 再根据提示执行 ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 安装网络插件 Flannel ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 查看是否成功创建flannel网络 ```bash ifconfig | grep flannel ``` ## 3.2 初始化work1节点 ### 3.2.1 kubadm join 加入集群 ### 3.2.2 安装flannel网络插件 ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` master节点执行 ```bash kubectl get nodes ``` 查看 node 节点处于ready状态 # 参考链接 1. [使用vagrant 搭建 k8s集群_阿磊的博客-CSDN博客_vagrant 部署k8s](https://blog.csdn.net/qq_33229176/article/details/117410525) 2. [CentOS8下超详细安装配置kubernetes(K8S)_Witton的专栏-CSDN博客_centos8安装k8s](https://blog.csdn.net/witton/article/details/107085155) 3. [CentOS8系统时间同步解决方法 - linuxTang - 博客园 (cnblogs.com)](https://www.cnblogs.com/tyjs09/p/15095139.html) 4. [SSH 三步解决免密登录_jeikerxiao-CSDN博客_ssh免密登录](https://blog.csdn.net/jeikerxiao/article/details/84105529) 5. [Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 解决方法_albertjone的博客-CSDN博客](https://blog.csdn.net/albertjone/article/details/84946557) 6. [容器镜像服务 (aliyun.com)](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors) 7. [k8s【如果忘记master节点init后join命令怎么办】_Happywzy~的博客-CSDN博客](https://blog.csdn.net/wzy_168/article/details/106552841)
评论
楼主暂时不想被别人评论哦~