k8s入门(一)搭建简单的k8s集群
苗锦洲
0
30
181
0
使用vagrant在本地虚拟机搭建1master、1work的k8s集群,系统centos/8、默认网络插件:flannel、pod网段B类:172.20.0.0/16、svc网段A类:10.1.0.0/16
友情提示:此篇文章大约需要阅读 14分1秒
# 目标
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)
评论
楼主暂时不想被别人评论哦~
已自动恢复阅读位置、日/夜间模式参数