vm虚拟机 k8s集群搭建

虚拟机配置(centos7 2G内存2个处理器)

建议最小硬件配置:2核CPU、2G内存、20G硬盘 服务器最好可以访问

名称

ip

master

192.168.179.128

node1

192.168.179.129

node2

192.168.179.130

1 配置虚拟机主机名解析,网络等

编辑三台服务器的 /etc/hosts 文件

192.168.179.128 master
192.168.179.129 node1
192.168.179.130 node2

分别重命名主机

hostnamectl set-hostname  node1(node1 是自定义的)

查看虚拟机ip地址

ip addr

执行完应该可以看到默认没有显示ip地址,xshell等工具无法连接

修改配置文件
从配置清单中可以发现 CentOS 7 默认是不启动网卡的(ONBOOT=no),把这一项改为YES(ONBOOT=yes)

vi /etc/sysconfig/network-scripts/ifcfg-ens33

k8s可以当做虚拟化工具吗 k8s部署虚拟机_linux


再次查询ip即可获得

三台机器都配置完可以相互ping一下检查是否连通

k8s可以当做虚拟化工具吗 k8s部署虚拟机_kubernetes_02

2 时间同步

#启动chronyd服务
systemctl start chronyd
systemctl enable chronyd
date

3 禁用selinux和firewalld服务

关闭firewalld服务

systemctl stop firewalld
systemctl disable firewalld

关闭firewalld服务

sed -i 's/enforcing/disabled/' /etc/selinux/config #重启后生效

4 禁用swap分区

vi /etc/fstab 
#注释掉下面的设置
 /dev/mapper/centos-swap swap

3、4两步后需要重启机器

reboot

5 添加网桥过滤和地址转发功能

cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

#然后执行
sysctl --system   //生效命令

6 docker安装(易踩坑)

这里最好自己安装完docker后检查docker能否正常使用,否则可能会导致kubeadm init失败

# 1.卸载旧的版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  #2.# 安装基本的安装包
sudo yum install -y yum-utils

#3.设置镜像仓库
sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云镜像
# 更像软件包索引  
yum makecache fast  
  
# 4.安装docker引擎
yum install docker-ce docker-ce-cli containerd.io # docker-ce 社区版 ee 企业版

#5. 启动Docker
systemctl enable docker && systemctl start docker # 代表启动成功

测试docker可以docker的常用命令

docker version

docker images

docker ps

7 配置docker镜像加速

#配置docker加速
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#重启docker
systemctl restart docker
#查看docker信息
 
docker info

8 安装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=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

安装指定版本并启动

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet && systemctl start kubelet

9 部署(仅master节点)

将下面代码中的192.168.179.128改成自己的master虚拟机的ip地址

kubeadm init \
  --apiserver-advertise-address=192.168.179.128 \
  --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

成功后如下图所示

k8s可以当做虚拟化工具吗 k8s部署虚拟机_kubernetes_03

10 创建必要文件(仅master节点)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

11.1 安装fannel(仅master节点)

虚拟机在后续创建deployment等时出现网络问题,建议换成calico

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

上面的命令大概率会连接失败,我的办法是自己翻墙把yml文件下载下来,再放到master机上,我的是在/root目录下
wget工具可以用yum命令下载

yum install wget

上面完成后启动

kubectl apply -f kube-flannel.yml

11.2 安装calico(推荐)

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

12 node结点加入

在两台node节点虚拟机上执行master节点kubeadm init 后生成的join代码
例如:

kubeadm join 192.168.179.128:6443 --token ixvxxd.oamu833eimbkvwt6 --discovery-token-ca-cert-hash sha256:fb6c95e8999315d12267287162973c08e319c731ac5f706d22199b2dfe08b8c2

建议先重启node上的kubeamd

kubeamd reset

如果node卡在 [preflight] Running pre-flight checks
可能是时间不同步或token失效,重新生成token即可
在master上执行

kubeadm token create --print-join-command
systemctl restart kubelet

加入成功如下图

k8s可以当做虚拟化工具吗 k8s部署虚拟机_k8s可以当做虚拟化工具吗_04

13 最终效果

使用kubectl的命名查看集群状态

kubectl get nodes

kubectl get pod --all-namespaces

或查看特定的node和pod

kubectl describe xxx

k8s可以当做虚拟化工具吗 k8s部署虚拟机_linux_05

14 node结点重新加入

kubeadm reset
rm -rf $HOME/.kube/config
rm -rf /var/lib/etcd

之后和之前node结点加入的步骤一样

15 可能用到的其他命令

在尝试过程中用到的其他常用命令

给kubectl取别名

vim ~/.bashrc
# 添加 alias kc='kubectl'
source ~/.bashrc

重装k8s组件

yum remove kubelet kubeadm kubectl

修改文件内容

vi 或 vim

修改完成

q!不修改强制退出
wq!修改,强制退出
!是强制的意思
cat xxx 查看文件内容
history 查看历史命令
journalctl -xeu kubectl 查看报错日志

docker删除

停止docker

systemctl stop docker

查询安装docker的文件包

yum list installed | grep docker

删除所有安装docker的文件包

yum -y remove '包名'

删除卷/网络内容/镜像/容器等,默认在/var/lib/docker目录

rm -rf /var/lib/docker

参考链接