Kubernetes集群环境搭建

快速体验

单机开发环境,通过minikube来安装,在Linux环境上,执行

minikube start --vm-driver=virtualbox --registry-mirror=https://registry.docker-cn.com

集群安装

如果为集群安装,需要前置要求:Centos7、2G以上内存、2CPU以上、30G硬盘以上,网络互通,通外网,禁止Swap分区,内存可以越大越好,VirtualBox虚拟机需要使用NAT网络,这样创建出来的虚拟机不会重复IP

虚拟机创建

使用vagrant快速创建虚拟机,也可单独通过镜像文件创建Linux

vagrant init centos/7
vagrant up

系统镜像下载,可用迅雷下,速度较快,下载CentOS/7,下载后可通过以下命令离线安装

vagrant box add D:\virtual.box --name centos/7
vagrant up

在vagrant目录中,编辑vagrantfile文件,修改如下,用于直接快速创建3台虚拟机

Vagrant.configure("2") do |config|
    (1..3).each do |i|
        config.vm.define "k8s-node#{i}" do |node|
            # 设置虚拟机的Box
            node.vm.box = "centos/7"
            # 设置虚拟机的主机名
            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"
            # VirtualBox相关配置
            node.vm.provider "virtualbox" do |v|
               # 设置虚拟机的名称
               v.name = "k8s-node#{1}"
               # 设置虚拟机的内存大小
               v.memory = 4096
               # 设置虚拟机的CPU个数
               v.cpus = 4
           end
       end
   end
end

编辑后通过命令创建虚拟机

vagrant up

配置虚拟机相关信息

# 修改配置允许ssh登陆
vi /etc/ssh/sshd_config
# 修改PasswordAuthentication yes
service sshd restart

配置网络

# 查看网络路由使用的是什么网卡
ip route show
# 查看具体IP配置
ip addr

在VirtualBox全局设定中,网络模块增加一个NAT网络
在每个虚拟机设置的网络中,不再使用网络地址转换(NAT),而选择NAT网络,并在高级中重新生成MAC地址

关闭防火墙

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
# 验证,swap必须为0
free -g

配置主机名与IP对应关系

# 根据实际IP与主机名配置
vi /ect/hosts
10.0.2.5 k8s-node1
10.0.2.4 k8s-node2
10.0.2.15 k8s-node3

安装基础环境

为所有节点安装Docker

yum install -y yum-utils \
               device-mapper-persistent-data \
               lvm2
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce \
docker-ce-cli \
containerd.io

配置docker加速

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ayrcbdjt.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl start docker
systemctl enable docker

配置阿里云yum源

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.18.6 kubeadm-1.18.6 kubectl-1.18.6
systemctl enable kubelet
systemctl start kubelet

集群创建

下载images脚本,若网络顺畅可跳过

#!/bin/bash

images=(
    kube-apiserver:v1.18.6
    kube-proxy:v1.18.6
    kube-controller-manager:v1.18.6
    kube-scheduler:v1.18.6
    coredns:1.6.5
    etcd:3.4.3-0
    pause:3.1
)

for imageName in ${images[@]} ; do
    docker pull registry.  aliyuncs.com/google_containers/$imageName
#   docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
done

初始化master节点

kubeadm init \
--apiserver-advertise-address=10.0.2.5 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.6 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

执行完毕后,先执行日志最后打印的3条命令,然后保存好加入集群的token,该token默认2小时有效,过期后需要重新创建token

6ff7284ae87242f095443dc87d3c52de

若过期则使用如下命令重新获取

kubeadm token create --print-join-command
kubeadm token create --tt|0 --print-join-command

安装pod网络插件,这里使用的是flannel

kubectl apply -f \
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

检查配置是否成功

# 获取名称空间
kubectl get ns
# 获取pods,其中kube-flannel项需要是Running状态
kubectl get pods --all-namespaces
# 获取所有的节点
kubectl get nodes

等待kube-flannel全部启动好,使用之前的token命令,让其他节点加入集群

监控集群创建进度

watch kubectl get pod –all-namespaces -o wide

测试操作体验

kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8
kubectl get all -o wide
kubectl get pods -o wide
kubectl get svc
kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort
kubectl scale --replicas=3 deployment tomcat6

yml模板输出

kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8 --dry-run -o yaml > tomcat6.yml
kubectl apply -f example-service.yaml

最后可视化界面可以使用Kubesphere

posted @ 2021-04-22 10:20  rqx  阅读(100)  评论(0编辑  收藏  举报