【k8s】kubeadm快速部署Kubernetes

拈花ヽ惹草 提交于 2020-05-05 20:03:03

###1.Kubernetes 架构图### kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署:

# 创建一个 Master 节点 
$ kubeadm init

# 将一个 Node 节点加入到当前集群中
$ kubeadm join <Master节点的IP和端口 >

使用它构建集群时,大致可分为如下几步:

  • 在Master及各Node安装Docker、kubelet及kubeadm,并以系统守护进程的方式启动Docker和kubelet服务。
  • 在Master节点上通过kubeadminit命令进行集群初始化。
  • 各Node通过kubeadmjoin命令加入初始化完成的集群中。
  • 在集群上部署网络附件,如flannel或Calico等以提供Service网络及Pod网络。

###2.Kubernetes 环境准备### 1⃣️关闭防火墙:

systemctl stop firewalld && systemctl disable firewalld

2⃣️关闭selinux:

sed -i 's/enforcing/disabled/' /etc/selinux/config 
setenforce 0

3⃣️关闭swap:

#临时
swapoff -a  
#永久关闭swap分区
sudo sed -ri 's/.*swap.*/#&/' /etc/fstab

4⃣️添加主机名与IP对应关系(记得设置主机名):

cat /etc/hosts
10.211.55.3 k8s-master 
10.211.55.4 k8s-node1
10.211.55.6 k8s-node2
10.211.55.7 k8s-node3

5⃣️将桥接的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

###3.所有节点安装Docker/kubeadm/kubelet### Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。 1⃣️安装Docker:

sudo su
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

2⃣️添加阿里云YUM软件源:

[root@k8s-master yum.repos.d]# cat /etc/yum.repos.d/kubernetes.repo 
[kubernetes]
name=Kubernetes 
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
enabled=1
gpgcheck=0
repo_gpgcheck=0 
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

3⃣️安装kubeadm,kubelet和kubectl

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

###4.部署Kubernetes Master### master节点初始化集群 1⃣️由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

kubeadm init --apiserver-advertise-address=10.211.55.3 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

执行init后:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.211.55.3:6443 --token eehcsb.r8tnvj7ov436x63q \
    --discovery-token-ca-cert-hash sha256:583f343b5d55ff96c5a83ccc82444de3c0313adf135d8a980507932aa2f51e1d 

如果出错,执行:

[root@k8s-master yum.repos.d]# kubeadm reset

2⃣️使用kubectl工具:

[root@k8s-master yum.repos.d]# mkdir -p $HOME/.kube
[root@k8s-master yum.repos.d]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master yum.repos.d]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master yum.repos.d]# kubectl get nodes
NAME         STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   8m33s   v1.17.0

另外, 提示我们还需要创建网络,并且让其他节点执行kubeadm join...加入集群。 ###5.创建网络### 如果不创建网络,查看pod状态时,可以看到kube-dns组件是阻塞状态,集群是不可用的:

[root@k8s-master yum.repos.d]# kubectl get pod -n kube-system
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-9d85f5447-n9kkd              0/1     Pending   0          25m
coredns-9d85f5447-s9ms2              0/1     Pending   0          25m
etcd-k8s-master                      1/1     Running   0          25m
kube-apiserver-k8s-master            1/1     Running   0          25m
kube-controller-manager-k8s-master   1/1     Running   0          25m
kube-proxy-94wtc                     1/1     Running   0          5m41s
kube-proxy-h8q8h                     1/1     Running   0          5m45s
kube-proxy-kxmxt                     1/1     Running   0          25m
kube-proxy-nxtpq                     1/1     Running   0          5m44s
kube-scheduler-k8s-master            1/1     Running   0          25m

master节点部署网络插件fannel 基于kubeadm部署时,flannel同样运行为Kubernetes集群的附件,以Pod的形式部署运行于每个集群节点上以接受Kubernetes集群管理。 事实上,也可以直接将flannel程序包安装并以守护进程的方式运行于集群节点上,即以非托管的方式运行。部署方式既可以是获取其资源配置清单于本地而后部署于集群中,也可以直接在线进行应用部署。 部署命令是“kubectlapply”或“kubectlcreate”,例如,下面的命令将直接使用在线的配置清单进行flannel部署:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

参考 https://github.com/coreos/flannel 至此master节点就完成了!

[root@k8s-master parallels]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   

###6.加入Kubernetes Node### Master各组件运行正常后即可将各Node添加至集群中。 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

[root@k8s-node1 yum.repos.d]# kubeadm join 10.211.55.3:6443 --token eehcsb.r8tnvj7ov436x63q \
>     --discovery-token-ca-cert-hash sha256:583f343b5d55ff96c5a83ccc82444de3c0313adf135d8a980507932aa2f51e1d 
...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

查看kubernetes集群状态:

[root@k8s-master parallels]# kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   17h   v1.17.0
k8s-node1    Ready    <none>   17h   v1.17.0
k8s-node2    Ready    <none>   17h   v1.17.0
k8s-node3    Ready    <none>   17h   v1.17.0

查看k8s部署过程中用到的镜像: master节点

[root@k8s-master parallels]# docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
registry.aliyuncs.com/google_containers/kube-proxy                v1.17.0             7d54289267dc        4 days ago          116MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.17.0             5eb3b7486872        4 days ago          161MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.17.0             78c190f736b1        4 days ago          94.4MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.17.0             0cae8d5cc64c        4 days ago          171MB
registry.aliyuncs.com/google_containers/coredns                   1.6.5               70f311871ae1        5 weeks ago         41.6MB
registry.aliyuncs.com/google_containers/etcd                      3.4.3-0             303ce5db0e90        6 weeks ago         288MB
quay.io/coreos/flannel                                            v0.11.0-amd64       ff281650a721        10 months ago       52.6MB
registry.aliyuncs.com/google_containers/pause                     3.1                 da86e6ba6ca1        24 months ago       742kB

Node节点

[root@k8s-node1 parallels]# docker images
REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
registry.aliyuncs.com/google_containers/kube-proxy   v1.17.0             7d54289267dc        3 days ago          116MB
quay.io/coreos/flannel                               v0.11.0-amd64       ff281650a721        10 months ago       52.6MB
registry.aliyuncs.com/google_containers/pause        3.1                 da86e6ba6ca1        24 months ago       742kB
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!