运维开发网

Kubernetes + ingress-Nginx 搭建

运维开发网 https://www.qedev.com 2021-03-06 12:58 出处:51CTO 作者:秦策
使用kubeadm部署Kubernetes集群主机名IP地址操作系统描述master192.168.10.103CentOS7_x64KubernetsMaster/Etcd节点node1192.168.10.101CentOS7_x64KubernetsNode节点部署Docker和kubeadm首先需要在所有Kubernetes集群的节点中安装Docker和kubeadm。1.设置使用国内Yu
使用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 搭建

至此测试完毕,验证成功!

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号