kubernets集群部署
一,kubernetes架构:简易架构:简单来说:k8s分为两个角色,一个为master角色,一个为node角色。master节点包括:scheduler(调度器),apiserver,controller-manager(控制器);master节点负责集群管理。用来接收用户的控制命令并将命令转化为具体的任务分散到每个node计算节点上。node(计算)节点 接收master分的任务,根据mast
一,kubernetes架构:
简易架构:简单来说:k8s分为两个角色,一个为master角色,一个为node角色。
master节点包括:scheduler(调度器),apiserver,controller-manager(控制器);
master节点负责集群管理。用来接收用户的控制命令并将命令转化为具体的任务分散到每个node计算节点上。
node(计算)节点 接收master分的任务,根据master指令运行任务。
Node节点有kubelet,kube-proxy,docker-Engine
Kubelet,相当于master的一个agent;
Kube-proxy,管理任务的网络;
Docker-Engine:k8s本身不具备容器引擎,不能直接跑容器。需要第三方的容器引擎(主流docker)。
Etcd:是k8s提供的一个高可用的键值数据库,用于保存集群所有的网络配置和资源对象的状态信息,也就是保存了整个集群的状态。
简易架构图:

详细架构图:

kubernetes基本概念:
Pod:
最小部署单元
一组容器的集合
一个pod中的容器共享网络命名空间
pod是短暂的
Controllers(控制器):
ReplicaSet:确保预期的Pod副本数量
Deployment:无状态应用部署
StatefulSet:有状态部署应用
DaemonSet:确保所有Node运行同一个Pod
Job:一次性任务
Cronjob:定时任务
Label:标签,附加在某个资源上,用于关联对象、查询和筛选
Namespaces:命名空间,将对象逻辑上隔离。
Service
防止Pod失联
定义一组Pod的访问策略
kubernetes集群部署基础环境配置:
1,)安装要求:
(1.)3台机器(1台master,2台node),操作系统CentOS7.4-86_x64。
(2.)硬件配置:2GB或更多RAM,2个或更多CPU,硬盘30GB或更多。
(3.)集群内所有机器内网互通
(4.)机器可以访问外网,需要拉取镜像(配置2块网卡)
(5.)禁止swap分区
2,)环境准备:
(1.)安装centos7 系统,并配置网络,安装对应命令包(vim,ntpdate等),并注意服务器之间的时间同步和时间准确度。
ntpdate time.windows.com
(2.)关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
(3.)关闭selinux:
sed -i ‘s/enforcing/disabled/’ /etc/selinux/config
setenforce 0
(4.)关闭swap:
swapoff -a 临时关闭
vim /etc/fstab 永久关闭
(5.)添加主机名与ip对应关系
# cat /etc/hosts
192.168.26.130 master
192.168.26.131 kubernetesNode1
192.168.26.132 kubernetesNode2
(6.)将桥接的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
(7.)所有节点安装docker/kubeadm/kubelet/kubectl
1,安装docker:
【注:centos7.4系统在安装docker时有报错缺少container-selinux包,需先安装container-selinux解决】
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install container-selinux -y
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker –version

【注意:后面在初始化k8s master节点时会有警告:需要将docker的cgroupdriver参数改为systemd(docker info可以查看docker系统信息)】
配置docker启动参数
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://yywkvob3.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#重启docker
systemctl daemon-reload
systemctl restart docker
2,安装kubeadm,kubelet,kubectl
配置kubernetes镜像
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.15.0 kubeadm-1.15.0 kubectl-1.15.0
//由于版本更新频繁,此处指定版本号部署
systemctl enable kubelet
3,部署kubernetes Master
在192.168.26.130(master机器)上执行。初始化master节点
kubeadm init \
--apiserver-advertise-address=192.168.26.130 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
参数解析:
--apiserver-advertise-address //api通告地址(apiserver地址)
--image-repository //镜像仓库(默认拉取镜像地址k8s.gcr.io是国外地址,考虑到网络问题,此处配置为阿里云地址)
--kubernetes-version //指定k8s版本
--service-cidr //kube-proxy的ip
--pod-network-cidr //每个容器的ip
初始化成功后会有此显示:

初始化启动流程:
1.)执行前先检查配置,之后拉取kubernetes集群所需要的镜像

2.)启动kubelet,将带有标志的kubelet环境文件写入文件“/var/lib/kubelet/kubeadm flags.env”,将kubelet配置写入文件“/var/lib/kubelet/config.yaml”,之后激活kubelet服务。

3.)之后生成证书和密钥,先生成apiserver的证书和密钥

4.)生成etcd的证书

5.)生成代理proxy的证书

6.)生成kubeconfig文件,此文件用于生成其他组件

7.)生成master的3个组件,通过静态方式为“kube apiserver”创建静态Pod清单,为“kube控制器管理器(kube-controller-manager)”创建静态吊舱清单,为“kube调度器(kube-scheduler)”创建静态Pod清单

8.)生成token

9.)部署两个组件(一个为DNS,为k8s内部的DNS,此版本1.15默认为CoreDNS;另一个为负责网络的proxy)。

10.)会提示一下操作,并根据提示完成操作

4,初始化完成后完成提示操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5,安装Pod网络插件(CNI)
【备注:原地址因网络原因无法拉取下载,从网络中找的另外的地址拉取的】
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
6,执行# kubectl get pods -n kube-system可以查看pod是否已启动起来

7,在node节点执行,将node节点加入到集群。
kubeadm join 192.168.26.130:6443 --token 4aemma.gdxg6ballhqazd2f \
--discovery-token-ca-cert-hash sha256:b3b3c2a1900a92d9307d21dc56d7c11d721cf926f6f1515df48b84072fe33367
【注:此命令在kubernetes集群master初始化成功后会有此命令】

出现此标识表示当前node节点初始化成功。提示可以使用kubectl get nodes命令查询。
在master节点使用kubectl get nodes此命令可以看到node节点已准备好

部署一个nginx应用,测试集群是否正常
1.)kubectl create deployment nginx --image=nginx
//创建deployment控制器,镜像使用nginx
2.)kubectl expose deployment nginx --port=80 --type=NodePort
//将应用暴露,使外部用户可以访问到此应用。(使用node节点ip+端口即可访问到该应用)。
3.)kubectl get pod,svc
//查看nginx状态。

访问node节点(根据查询看暴露端口为31288):
即访问node1节点:192.168.26.131:31288

访问node2节点:192.168.26.132:31288

更多推荐



所有评论(0)