docker容器虽然功能强大,但是在实际使用的时候,还是有很多不便,比如动态伸缩,自动伸缩,回滚等一系列操作都需要手动去操作部署,k8s就是为了解决容器的管理问题,提高生产运维效率,所以为啥一个logo是船,一个logo是船舵了。
k8s搭建并不难,但是要花上一点时间,我大概是重来了4次左右,每次都会碰到一些问题,比如centos配置不对,k8s和docker版本不对,所以,一定要注意版本信息。
以下是我用到的所有软件的版本信息:
名称 | 版本 | 说明 | |
1 | vm player | 16.2.5 | vm的免费版本,满足个人需求 |
2 | centos 7 | 7-2009 | 开启了图形桌面 |
3 | docker -ce | 20.10.17-3.el7 | |
4 | kubernetes | v1.23.6 | |
5 | calico | v3.22 |
1.虚拟机和centos的安装
虚拟机配置2个CPU,2G内存,20G硬盘(k8s最低配置,不然到时候跑不起来)
centos安装没什么难度,注意一下记得开启ens33就好了,不然后面访问不了外网,当然,也可以在安装完以后在配置
然后等着安装完成就可以了!然后选择root账号登录
2.centos网络配置
打开一个Terminal,输入命令
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp" # ip方式,默认是动态IP,可改为static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="011f730c-6322-4ebe-aeed-6bbd59a1c6a5"
DEVICE="ens33"
ONBOOT="yes"
我这里因为是虚拟环境,就直接用动态IP。
如果你没有这些信息,表示你安装的时候没有启用ens33,复制上面的配置到Terminal里面,然后按下ESC,输入":" -> "wq",就可以保存了。
service network restart # 重新启动
查看是否可以访问外网,ctrl+c结束
ping www.baidu.com
ps:clear命令可以清空屏幕
更改hosts文件
3. 关闭fireware , selinux,swap
k8s在不关闭linux这几个功能时,将无法启动
systemctl stop firewalld
systemctl disable firewalld #永久关闭
setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #永久关闭
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久关闭
4.更新centos系统
yum update
5.docker 安装
国外拉取镜像可能会失败,并且慢,更改镜像地址,使用阿里云的镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.安装docker containerd
Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等
yum install docker-ce docker-ce-cli containerd.io
7.查找docker-ce的镜像列表
yum list docker-ce --showduplicates | sort -r
找到20.10.17对应的镜像名称20.10.17-3.el7
8.安装docker
yum -y install docker-ce-20.10.17-3.el7
9.更改docker cgroup驱动
cgroups是一个非常强大的Linux内核工具,他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重,计算使用量,控制进程启停等
docker 默认的cgroup为cgroupfs,而k8s必须为sysmtemd,如果不更改,安装k8s后会启动失败,这一步很重要。
先在/etc/docker下新建文件daemon.json文件(可以从其他地方复制一个文件过来更改名称)
输入vi /etc/docker/daemon.json,按insert键加入大括号中的内容,
输入":wq"保存并退出
vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
设置docker 开机启动
systemctl enable docker && systemctl start docker
到此docker 就安装完成了
10.k8s安装
配置桥接的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
添加k8s阿里云的镜像地址
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
EOF
拉取k8s镜像安装
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet
kubeadm 初始化
注意这里一定要加版本号v1.23.6,如果初始化失败了,可以使用kubeadm reset重来,然后再执行kubeadm init
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.6 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
如果出现以下信息,表示初始化成功
配置集群信息
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
11.常用命令
kubectl get nodes 查看k8s集群的所有结点
kubectl get pods --all-namespaces -o wide 查看所有的pod信息
到此k8s环境基本上搭建完成了,但是我们看到master节点状态还是NotReady,并没有启动。然后我们可以看到pod中coredns的状态不是Running。
下一节,我将解决这些问题,并且安装k8s的可视化界面。
如果你觉得我的文章还不错,欢迎关注,转发和评论。大家也可以在微信公众号和今日头条搜索"墨汁软件"关注我哟!