k8s基础组件介绍

  1. kube-apiserver:是信息的汇聚中枢,提供了所有内部和外部的 API 请求操作的唯一入口,负责整个集群的认证、授权、访问控制、服务发现等能力
  2. Kube-Controller-Manager:负责维护整个 Kubernetes 集群的状态,比如多副本创建、滚动更新等
  3. Kube-scheduler:监听未调度的 Pod,按照预定的调度策略绑定到满足条件的节点上
  4. kube-proxy:控制网络访问,互相同步状态数据状态
  5. pod:是 Kubernetes 中原子化的部署单元,它可以包含一个或多个容器,而且容器之间可以共享网络、存储资源

Kubernetes 中所有的状态都是采用上报的方式实现的,所有的容器状态汇报都是由 Kubelet 主动向 APIServer 发起的

一旦新增的 Node 被 APIServer 纳管进来后,Kubelet 进程就会定时向 APIServer 汇报“心跳”,即汇报自身的状态,包括自身健康状态、负载数据统计等

当一段时间内心跳包没有更新,那么此时 kube-controller-manager 就会将其标记为NodeLost(失联)

k8s核心组件

组件名称说明
etcd保存了整个集群的状态
apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet负责维护容器的生命周期,同时也负责Volume和网络的管理
Container runtime负责镜像管理以及Pod和容器的真正运行
kube-proxy负责为Service提供集群内部的服务发现和负载均衡


服务器准备

请先参考 Windows10安装VirtualBox及vagrant 安装好VirtualBox及vagrant

服务器规划
使用3台服务器部署,ip地址如下:

192.168.99.200  k8s-node1
192.168.99.201  k8s-node2
192.168.99.202  k8s-node3

其中192.168.99.200作为k8s的主节点,安装k8s的软件及在这台服务器上输入命令行做测试,其它2台作为node节点

假定Vagrantfile文件的路径在D:\vagrant\k8s
Vagrantfile文件的内容为

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.box_url = "https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box"

            # 设置虚拟机的主机名
            node.vm.hostname="k8s-node#{i}"

            # 设置虚拟机的IP
            node.vm.network "private_network", ip: "192.168.99.#{199+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 = 3072
                # 设置虚拟机的CPU个数
                v.cpus = 4
            end
        end
   end
end

启动服务器

使用管理员权限打开cmd命令行窗口

cd D:\vagrant\k8s

#启动服务器
vagrant up

连接服务器,配置ssh及hosts

vagrant ssh k8s-node1

#切换root用户,默认的密码是vagrant
su

#sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
#把PasswordAuthentication no 修改成yes,保存并退出
vi /etc/ssh/sshd_config

#重启ssh服务
service sshd restart

vi /etc/hosts
#删除这行127.0.1.1 k8s-node1 k8s-node1
192.168.99.200  k8s-node1
192.168.99.201  k8s-node2
192.168.99.202  k8s-node3

#保存,执行2次exit退出k8s-node1服务器

使用vagrant ssh k8s-node2vagrant ssh k8s-node3 连接上服务器,做相同的配置


使用xshell连接3台服务器

使用xshell用root用户连接上3台服务器
使用xshell的工具->发送键输入到所有会话,给3台服务器同时执行命令

#检查3台机器是否能正常通信
ping k8s-node1
ping k8s-node2
ping k8s-node3

#安装网络工具包,包含ifconfig等
yum install -y net-tools

#安装sz、rz
yum install -y lrzsz 


# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config


#关闭交换分区 free -m 其中swap 要为0
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

#允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF


cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

#使以上配置生效
sudo sysctl --system

k8s安装流程

  1. 在所有机器上安装docker、kubelet、kubectl、kubeadm
  2. 在主节点(k8s-node1)上执行 kubeadm init
  3. 在其它节点(k8s-node2、k8s-node3)加入集群 kubeadm join

安装docker

请参考 Centos7安装docker 安装docker

这里简要使用命令安装docker

sudo yum install -y yum-utils	

#使用阿里云的库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装指定版本docker
yum install -y docker-ce-20.10.8 docker-ce-cli-20.10.8  containerd.io-1.4.6

#启动docker
sudo systemctl start docker  

#设置开机自动启动docker
sudo systemctl enable docker  

docker -v

#docker设置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com", "http://hub-mirror.c.163.com", "https://rn2snvg1.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

#重新加载配置项、重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker

Logo

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

更多推荐