使用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.repoyum makecache2.安装指定的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.el7vim /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 docker3.查看Docker版本docker --version4.设置kubernetes YUM仓库vim /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg5,安装软件包yum install -y kubelet-1.13.3yum install -y kubeadm-1.13.3yum install -y kubectl-1.13.36.配置kubelet默认情况下,Kubelet不允许所在的主机存在交换分区,后期规划的时候,可以考虑在系统安装的时候不创建交换分区,针对已经存在交换分区的可以设置忽略禁止使用Swap的限制,不然无法启动Kubelet。swapoff -avim /etc/sysconfig/kubeletKUBELET_EXTRA_ARGS="--fail-swap-on=false7.设置内核参数cat > /etc/sysctl.d/k8s.conf <<EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1EOF使配置生效sysctl --system8.启动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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config使用kubectl命令查看组件状态,如图
使用kubectl获取Node信息
目前只有一个节点,角色是Master,状态是NotReady。kubectl get nodes部署网络插件canalkubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yamlkubectl 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配置文件来完成。查看podkubectl get pods --all-namespaces部署Node节点
在Master节点输出增加节点的命令kubeadm token create --print-join-command增加标签
kubectl label nodes node1 node-role.kubernetes.io/node=查看效果kubectl get nodesdocker 搭建本地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部署ingress-nginx
github地址:https://github.com/kubernetes/ingress-nginx
在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes中目前提供了以下几种方案:
NodePortLoadBalancerIngress使用kubectl 部署ingress-controller之后执行命令
kubectl apply -f mandatory.yamlkubectl apply -f service-nodeport.yaml验证结果
精彩评论