步骤0:虚拟环境设置
预先需要的环境:首先创建2个虚机超简版,虚机是centos7,网络是net,1cpu,2g内存,30g磁盘
开始搭建:
我们使用的命令没有权限,因此先给用户赋权:
使用xshell连接虚拟机操作更加方便:
步骤1:配置源,配置虚机系统内容,安装基本docker环境
第一部分:
1.配置阿里yum源wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.这里会发现报错:也就是没有权限admin is not in the sudoers file. This incident will be reported
3.配置用户权限:
4.再次执行1,然后执行:
yum makecache
提示:Metadata Cache Created
表示完成第一部分
第二部分:
1.关闭防火墙:防火墙如果不提前关闭,接下来搭建集群会产生各种毛病
执行:sudo systemctl stop firewalld && sudo systemctl disable firewalld
提示:systemctl stop firewalld
则完成第二部分
2.关闭swap,Linux的Swap内存交换机制会在内存不足的时候使用磁盘扩展内存的存储,因此会产生严重的性能下降,需提前关闭,否则会因为内存交换而影响性能以及稳定性。
- 执行swapoff -a可临时关闭,但系统重启后恢复
- 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后(reboot)可永久关闭,如下图:
- 或直接执行:
sudo sed '/ swap / s/^/#/ /etc/fstab
(和上面其实是一个意思)
关闭前:
关闭后:
这里,关闭交换区部分完毕
注:后面我们知道,我们还需要关闭iptable,因此这也可以直接在这里先处理
第三部分
修改本地的dns信息
查看本地ip,进而获取对应的本地(ifcnf-ens33)文件是哪个:
网管查询:
完成后就可以获取了。
第四部分
安装docker
1.阿里云的Docker仓库sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
但是安装时报错,提示没有:yum-config-manager
这个命令在yum-utils 包里,可以通过先安装yum-utils ,执行:sudo yum -y install yum-utils
2.安装docker社区版
sudo yum install docker-ce -y
添加aliyundocker仓库加速器
由于cgroupfs”作为Docker cgroup驱动程序。 而推荐的驱动程序是“systemd”,也添加一下:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
3.提示安装完毕后,执行docker version
查看版本并确认真正完成安装
看到上面显示:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
需要执行下面命令:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
4.启动docker 并设置开机自动启动:sudo systemctl start docker & systemctl enable docker
5.运行,验证是否完成docker run hello-world
问题:我们发现,每次执行docker都需要sudo,这是因为当前用户没有加入到docker用户组中。
# 查看组
[admin@localhost ~]$ groups
admin
# 将admin加入到docker组
[admin@localhost ~]$ sudo usermod -aG docker admin
#重新登陆当前admin用户
[admin@localhost ~]$ su - admin
Password:
Last login: Wed May 6 17:19:02 CST 2020 from 192.168.235.1 on pts/0
# 验证是否成功
[admin@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[admin@localhost ~]$
至此,步骤1结束。
步骤2:搭建一主一从k8s集群
第一部分
添加阿里k8s源:
cat <<EOF > /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
EOF
第二部分
关闭SeLinux
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
由于管理着资源权限,因此我们初学直接关闭,防止接下来莫名的问题,不知道从何查起。
执行:sudo setenforce 0
第三部分
配置主机名:
我们现在有2台虚机,一主一从。
查看IP:
主:192.168.235.133
从:192.168.235.129
修改主机名:
编辑 /etc/hostname,将hostname修改为k8s-node1(重启生效)
设定主机hosts:
编辑 /etc/hosts,追加内容 ip k8s-node?
(所有节点都需要添加ip和hostname:192.168.235.129 k8s-node2192.168.235.133 k8s-node2 从节点内容编辑为:192.168.235.129 k8s-node1)
这样,主节点就可以直接通过k8s-node2访问ip为192.168.235.129的从节点,反之亦然。
第四部分
配置内核参数,将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
第五部分
安装常用包:yum install vim bash-completion net-tools gcc -y
第六部分
安装k8s三件套:kubelet、kubeadm、kubectl
执行:
yum install -y kubelet kubeadm kubectl
完成安装
第七部分
配置kubelet的cgroup drive,需要确保docker 的cgroup drive 和kubelet的cgroup drive一样
但是我这里找不到该文件,我直接跳过:cat: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf: No such file or directory
第八部分
启动kubeletsystemctl enable kubelet && systemctl start kubelet
第九部分
下载K8S的Docker镜像
需要合理上网,当然还有其它方法,下载别人在墙内的资源,然后用脚本导入也行,问题就是安装的东西版本不是最新的,或者指定阿里源。
初始化集群,只在主节点先初始化:
kubeadm init --kubernetes-version=1.18.0 --apiserver-advertise-address=192.168.122.21 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
POD的网段为: 10.122.0.0/16, api server地址就是master本机IP。
这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。
如上图,完成,最后会返回一句话,用来将其他节点加入:
kubeadm join 192.168.235.132:6443 --token e2wn2a.ns6czdzz5xp2e0hg --discovery-token-ca-cert-hash sha256:289cccfb2142f52b3f5ca67a2d624f3c6c3b3ff6fb9388334598842dc2261275
结束,执行 docker images
检查一下镜像是否已经存在
这样我们就完成了一台虚机的k8s安装工作,所有文件都已经安装在一台机器上面,因此可以通过直接复制这个虚机就可以得到一个一模一样的另外一台虚机,之前的安装都不需要再做一遍了。当然,作为一个小白,我建议,大家再从头来一遍,对于安装操作这种工作就是一句话:无他,唯手熟尔!!!
执行join in 将其他node节点加入到集群:
第十部分
根据提示创建kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行下面命令,使kubectl可以自动补充source <(kubectl completion bash)
查看节点,pod
kubectl get node
kubectl get pod --all-namespaces
输出结果:
node节点为NotReady,因为corednspod没有启动,缺少网络pod
第十一部分
安装calico网络
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
安装完毕,再查看pod和node
kubectl get pod -n kube-system
kubectl get node
第十二部分
由于我们只有一主一从,K8S集群默认不会将Pod调度到Master上,这样Master的资源就浪费了。
在Master(即k8s-node1)上,可以运行以下命令使其作为一个工作节点:
kubectl taint nodes --all node-role.kubernetes.io/master-
完成,接下来就把其他节点加进来就ok了。