📕 virturalBox 虚拟机搭建linux集群

为什么使用虚拟机呢,因为贫穷

  1. 下载安装virturalBox
  2. 下载安装vagrant
  3. 在指定文件夹下打开cmd命令窗口(管理员运行),初始化镜像 vagrent init centos/7
  4. vagrant up 创建虚拟机,太慢的话可以去官网下载,我这里用的这种方式 vagrant box add centos CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box 安装
  5. 创建完成后 vagrant ssh 链接
  6. 更改Vagrantfile 的 config.vm.network “private_network” , ip : “192.168.33.10” # 与虚拟机网卡在同一个网段
  7. vagrant reload 重启

📕 k8s环境搭建

Vagrantfile

Vagrant.configure("2") do |config|
   (1..3).each do |i|
        config.vm.define "k8s-node#{i}" do |node|
            # 设置虚拟机的Box
            node.vm.box = "centos7"

            # 设置虚拟机的主机名
            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 = 4096
                # 设置虚拟机的CPU个数
                v.cpus = 2
            end
        end
   end
end

调用指令 vagrant up 创建三台虚拟机
创建完成后分别登陆三台虚拟机开启密码访问

vagrant ssh k8s-node1
su root # 切换为root用户
vim /etc/ssh/sshd_config 
#将 passwordAuthentication  no 改为 yes
service sshd restart
exit
vagrant ssh k8s-node2
... # 同上

完成后打开xShell 使用这个来进行连接,连接三台虚拟机,用户名root 密码 vagrant
连接后查看网卡发现都一样需要修改网卡,不应该使用同一个网卡,在virtualBox中关闭三台虚拟机重新设置网络模式
在virtualBox的全局设置中添加网络,每一个虚拟机设置中修改网络模式为nat网络,在高级中重新生成mac地址,设置完成后启动三台虚拟机
互相ping一下可以ping通,ping一下百度可以ping通,说明网络配置没问题了
关闭防火墙,安全策略和分区

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
# 关闭 swap
swapoff -a
# 配置永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
free -g # 验证一下

添加host 映射

vi /etc/hosts
# 填写主机域名解析
10.0.2.4 k8s-node1
10.0.2.5 k8s-node2
10.0.2.15 k8s-node3

将桥接的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

准备好之后可以生成一个备份
为每一个节点安装docker

# 卸载docker
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
# 下载安装依赖
sudo yum install -y yum-utils
# 设置镜像仓库 使用阿里仓库
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动docker
sudo systemctl start docker
# 启动docker hello-world 默认镜像
sudo docker run hello-world
# 启动成功后删除此镜像(不删除也行就是占地方)
# 设置阿里镜像加速
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]}EOF 
sudo systemctl daemon-reload 
sudo systemctl restart docker
# 设置开机自启
sudo systemctl enable docker

安装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
# 安装 kubeadm kubelet kubectl
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3 
# 一定要设置开机启动
systemctl enable kubelet 
# 启动一下 
systemctl start kubelet
# 查看状态 此时应该是启动不起来的,环境还没有配置好
systemctl status kubelet

初始化master 节点,执行下面的bash文件

# 首先手动安装一下插件
#!/bin/bash
images=(
	kube-apiserver:v1.17.3
    kube-proxy:v1.17.3
	kube-controller-manager:v1.17.3
	kube-scheduler:v1.17.3
	coredns:1.6.5
	etcd:3.4.3-0
    pause:3.1
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
#   docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName  k8s.gcr.io/$imageName
done
# 初始化master 这里要修改node1的addr,指定node1为master 这里不要发送所有只发送给master
kubeadm init --apiserver-advertise-address=10.0.2.4 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.17.3 --service-cidr=10.96.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
# 看给的提示是怎么写的
kubeadm join 10.0.2.4:6443 --token woq4i9.kzsnvsil4oka2de8 \
    --discovery-token-ca-cert-hash sha256:81d69c7ce44a029a2478536c2191923d916f7a9652191deda94d1cdb03bfc4fa 

如果时间过长会过期,过期的话可以执行下面指令重新生成一个

kubeadm token create --print-join-command 
kubeadm token create --ttl 0 --print-join-command
# 复制生成的那个
kubeadm join --token y1eyw5.ylg568kvohfdsfco --discovery-token-ca-cert-hash sha256: 6c35e4f73f72afd89bf1c8c303ee55677d2cdb1342d67bb23c852aba2efc7c73

安装pod网络插件

kubectl apply -f \ https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 这个可能被墙,可以使用提前准备好的

给node2和node3写入

kubeadm join 10.0.2.4:6443 --token woq4i9.kzsnvsil4oka2de8 \
    --discovery-token-ca-cert-hash sha256:81d69c7ce44a029a2478536c2191923d916f7a9652191deda94d1cdb03bfc4fa 

踩坑 关于加入节点卡死问题

date查看时间是否同步

yum install -y ntpdate 
ntpdate time.windows.com

在node1 输入指令监控进度,当所有ready后说明k8s集群部署完成

watch kubectl get pod -n kube-system -o wide

📕 kubesphere可视化工具

准备工作,参照官网,最后一条需要一个storageClass
以openEBS 作为 StorageClass

# 创建namespace
kubectl create ns openebs
# 安装openebs
kubectl apply -f https://openebs.github.io/charts/openebs-operator-1.5.0.yaml
# 设置openebs为默认存储
kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
# 查看默认存储
kubectl get sc

按照官网的步骤部署kubesphere, 这里一定要确定集群时间是同步的,不然会报拒绝连接(啊,这个搞了一天才搞定,虚拟机重启和回退副本会导致时间不同步)

# 同步时间
ntpdate time.windows.com
# 执行命令
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.0/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.0/cluster-configuration.yaml
# 检查安装日志,等着就行时间很长可以去睡会哈哈
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
# 看到这个界面说明安装完成
#####################################################
###              Welcome to KubeSphere!           ###
#####################################################

Console: http://10.0.2.4:30880
Account: admin
Password: P@88w0rd

NOTES:
  1. After you log into the console, please check the
     monitoring status of service components in
     "Cluster Management". If any service is not
     ready, please wait patiently until all components 
     are up and running.
  2. Please change the default password after login.
######################################################

# 查看是否全部正常运行
kubectl get pod --all-namespaces
kubectl get svc/ks-console -n kubesphere-system
# 确保在安全组中打开了端口 30880,并通过 NodePort (IP:30880) 使用默认帐户和密码 (admin/P@88w0rd) 访问 Web 控制台。

登录完成后,启用可插拔组件接着看官网

# 点击左上角的平台管理,然后选择集群管理.点击自定义资源 CRD,然后在搜索栏中输入 clusterconfiguration,点击搜索结果进入其详情页面。
# 在资源列表中,点击 ks-installer 右侧的三个点,然后选择编辑配置文件
# 将对应组件 enabled 的 false 更改为 true,以启用要安装的组件.完成后,点击更新以保存配置.
# 这里我们启用 devops,通知系统和告警系统,内存顶的住的话可以多开几个
devops:
    enabled: true
    jenkinsJavaOpts_MaxRAM: 2g
    jenkinsJavaOpts_Xms: 512m
    jenkinsJavaOpts_Xmx: 512m
    jenkinsMemoryLim: 2Gi
    jenkinsMemoryReq: 1000Mi # 限制一下内存
    jenkinsVolumeSize: 8Gi
alerting:
    enabled: true
# 完成后点击更新控制台调用logs 查看进度等待安装信息
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐