Kubernetes + ingress-Nginx 搭建

使用kubeadm部署Kubernetes集群

主机名 IP地址 操作系统 描述
master 192.168.10.103 CentOS7_x64 Kubernets Master/Etcd节点
node1 192.168.10.101 CentOS7_x64 Kubernets Node节点

部署Docker和kubeadm

首先需要在所有Kubernetes集群的节点中安装Docker和kubeadm。
1.设置使用国内Yum源
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache

2.安装指定的Docker版本
由于kubeadm对Docker的版本是有要求的,需要安装与kubeadm匹配的版本。
yum list docker-ce.x86_64 --showduplicates | sort -r
安装Docker18.06版本
yum -y install docker-ce-18.06.1.ce-3.el7
vim /etc/docker/daemon.json
{ "insecure-registries": ["http://192.168.10.101:5000"],
"registry-mirrors": ["https://wkgmaa0v.mirror.aliyuncs.com"]
}
启动docker并设置开机启动
systemctl start docker && systemctl enable docker
3.查看Docker版本
docker --version
4.设置kubernetes YUM仓库
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
5,安装软件包
yum install -y kubelet-1.13.3
yum install -y kubeadm-1.13.3
yum install -y kubectl-1.13.3
6.配置kubelet
默认情况下,Kubelet不允许所在的主机存在交换分区,后期规划的时候,可以考虑在系统安装的时候不创建交换分区,针对已经存在交换分区的可以设置忽略禁止使用Swap的限制,不然无法启动Kubelet。
swapoff -a
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false
7.设置内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
使配置生效
sysctl --system
8.启动kubelet并设置开机启动
systemctl enable kubelet&& systemctl start kubelet
注意,此时kubelet是无法正常启动的,可以查看/var/log/messages有报错信息,等待执行初始化之后即可正常,为正常现象。

初始化集群部署Master
kubeadm init --apiserver-advertise-address=192.168.10.103 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.13.3 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.2.0.0/16 --service-dns-domain=cluster.local --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU

为kubectl准备Kubeconfig文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

使用kubectl命令查看组件状态,如图
Kubernetes + ingress-Nginx 搭建

使用kubectl获取Node信息
目前只有一个节点,角色是Master,状态是NotReady。
kubectl get nodes
部署网络插件canal
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/canal.yaml
Master节点NotReady的原因就是因为没有使用任何的网络插件,此时Node和Master的连接还不正常。目前最流行的Kubernetes网络插件有Flannel、Calico、Canal,这里选择使用Canal。
因为基础的Kubernetes集群已经配置完毕,后面的增加组件等操作,几乎都可以使用kubectl和一个YAML配置文件来完成。
查看pod
kubectl get pods --all-namespaces
Kubernetes + ingress-Nginx 搭建
所有Pod的状态都变成Running之后,这个时候再次获取Node,会发现节点变成了Ready状态。

Kubernetes + ingress-Nginx 搭建

部署Node节点
在Master节点输出增加节点的命令
kubeadm token create --print-join-command
Kubernetes + ingress-Nginx 搭建
在Node节点执行
kubeadm token create --print-join-command
kubeadm join 192.168.10.103:6443 --token s2uwaq.svi4cl78d9te4ici --discovery-token-ca-cert-hash sha256:15d2db57bfcc140886d83f193a0712977308c4cac1c7622c8e53701187e9c827 --ignore-preflight-errors=Swap
查看所有节点
Kubernetes + ingress-Nginx 搭建
给Node加上Roles标签
查看节点的标签
kubectl get nodes --show-labels
Kubernetes + ingress-Nginx 搭建

增加标签
kubectl label nodes node1 node-role.kubernetes.io/node=
查看效果
kubectl get nodes

docker 搭建本地registry及使用Dockerfile构建镜像
docker pull registry
docker run -d -p 5000:5000 --name=registry --restart=always --privileged=true -v /data/docker/registry:/var/lib/registry registry
解释:
  -p 5000:5000 端口
  --name=registry 运行的容器名称
  --restart=always 自动重启
   --privileged=true centos7中的安全模块selinux把权限禁止了,加上这行是给容器增加执行权限
  -v /data/docker/registry:/var/lib/registry 把主机的/data/docker/registry 目录挂载到registry容器的/var/lib/registry目录下,假如有删除容器操作,我们的镜像也不会被删除
  registry  镜像名称
构建Dockerfile
Kubernetes + ingress-Nginx 搭建
docker build -t 192.168.10.101:5000/nginx:v1 .
docker push 192.168.10.101:5000/nginx:v1
Kubernetes + ingress-Nginx 搭建

部署ingress-nginx

github地址:https://github.com/kubernetes/ingress-nginx
Kubernetes + ingress-Nginx 搭建

在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes中目前提供了以下几种方案:
NodePort
LoadBalancer
Ingress
使用kubectl 部署ingress-controller
Kubernetes + ingress-Nginx 搭建
Kubernetes + ingress-Nginx 搭建
如果使用Nodeport方式需要部署service-nodeport.yaml
Kubernetes + ingress-Nginx 搭建

之后执行命令
kubectl apply -f mandatory.yaml
kubectl apply -f service-nodeport.yaml
验证结果
Kubernetes + ingress-Nginx 搭建
创建secret 用于配置SSL证书
kubectl create secret tls tls-secret --key=server.key --cert server.pem
Kubernetes + ingress-Nginx 搭建
创建2个测试应用,如图
Kubernetes + ingress-Nginx 搭建
Kubernetes + ingress-Nginx 搭建
再创建一个nginx应用,如图
Kubernetes + ingress-Nginx 搭建
部署应用
kubectl apply -f deploy-tomcat.yaml
kubectl apply -f deploy-nginx.yaml
查看pod,service 是否都正常启动,如图
Kubernetes + ingress-Nginx 搭建
测试效果
Kubernetes + ingress-Nginx 搭建
Kubernetes + ingress-Nginx 搭建
至此测试完毕,验证成功!

猜你喜欢

转载自blog.51cto.com/13718210/2646014