使用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://"] } 启动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 /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命令查看组件状态,如图

使用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 所有Pod的状态都变成Running之后,这个时候再次获取Node,会发现节点变成了Ready状态。

部署Node节点 在Master节点输出增加节点的命令 kubeadm token create --print-join-command 在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 查看所有节点 给Node加上Roles标签 查看节点的标签 kubectl get nodes --show-labels

增加标签 kubectl label nodes node1 /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 docker build -t 192.168.10.101:5000/nginx:v1 . docker push 192.168.10.101:5000/nginx:v1

部署ingress-nginx

github地址:https:///kubernetes/ingress-nginx

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

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