Kubernetes DevOps环境搭建(四):使用kubeadm安装Kubernetes集群

一、前言

K8s官方安装操作文档: http://docs.kubernetes.org.cn/457.html

二、安装Docker、kubectl、kubeadm

全部的机器都要安装 Docker,kubectl,和kubeadm

(1)Docker安装:前面已经说详细说明过了,这里不再赘述,传送门:Kubernets DevOps环境搭建(一):Docker环境搭建

(2)kubectl、kubelet、kubeadm安装: 官网安装说明:安装和设置kubectl 官网是直接使用wget命令下载安装的,我建议直接使用 yum 安装 https://storage.googleapis.com/kubernetes-release/release/stable.txt

# 在/etc/yum.repos.d/目录下添加Kubernetes的yum源
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 查看可以安装的软件列表,这时候应该就能看到 kubectl 的安装包了
$ yum list kubectl –showduplicates

# 安装kubectl,不带版本号默认是最新版,如果安装指定版本号:yum install kubectl-1.20.2-0
$ yum install kubectl.x86_64

# 安装成功,查看kubectl版本信息,输出版本号则成功
$ kubectl version --client

# 同样方法,安装 kubelet
$ yum install kubelet.x86_64
# 启用kubelet服务
$ systemctl enable kubelet && systemctl start kubelet
# 同样方法,安装 kubeadm
$ yum install kubeadm.x86_64

三、配置K8S集群前的准备

# 关闭防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld

# 临时关闭selinux【永久关闭:sed -i 's/enforcing/disabled/' /etc/selinux/config  】
$ setenforce 0  

# 临时关闭swap  [永久关闭:sed -ri 's/.*swap.*/#&/' /etc/fstab ]
$ swapoff -a 

# 各个节点设置主机名【建议设置一下主机名】
$ hostnamectl set-hostname master-107

# 在master的机器上面配置各个节点的host
$ cat >> /etc/hosts << EOF
192.168.56.107 master-107
192.168.56.108 node-108
192.168.56.109 node-109
EOF

# 将桥接的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  


# 最好让各个节点的时间同步
$ yum install ntpdate -y
$ ntpdate time.windows.com

四、使用kubeadm初始化Kubenets集群

master节点上运行以下命令, 一定要先关闭防火墙,apiserver-advertise-address 这个改成自己的master主键IP地址, kubetnets的版本也改成自己安装的版本

$ kubeadm init \
--apiserver-advertise-address=192.168.56.107 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12  \
--pod-network-cidr=10.244.0.0/16

执行完毕以后,后很完整的操作提示,直接按照操作提示执行即可,以下是我操作的提示信息

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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 192.168.56.107:6443 --token f2fd2i.tpwkqlmri2h1zk11 \
    --discovery-token-ca-cert-hash sha256:5198d38dc1d2de0a6c33853c0fef405e68bd88c7e73311a6671c1ac0fb448459 

所以要执行的命令是

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

$ export KUBECONFIG=/etc/kubernetes/admin.conf

(2) 各子节点加入集群

# 注意,以下的命令是在master初始化完成后,每个人的都不一样!!!需要复制自己生成的
$ kubeadm join 192.168.56.107:6443 --token f2fd2i.tpwkqlmri2h1zk11 \
    --discovery-token-ca-cert-hash sha256:5198d38dc1d2de0a6c33853c0fef405e68bd88c7e73311a6671c1ac0fb448459 

# 安装显示的token默认token有效期为24小时,如果过期了,需要在master上执行以下命令重新生成token
$ kubeadm token create --print-join-command

执行以后加入成功会有以下的提示

在master节点上运行 kubectl get nodes 会发现节点已经加入了,但是节点的状态是 NotReady,因为

五、安装pod网络(CNI网络插件)

Pod的网络插件有很多,不过使用kubeadm部署的只支持CNI网络插件

flanel官方文档:https://github.com/coreos/flannel/blob/v0.13.0/README.md

(1)在线下载的形式配置,下载网络插件配置(Kubernetes v1.7+ 以上)

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

(2)如果上述方法遇到如下如问题

解决的方法是,浏览器直接打开上面的链接下载这份 yml文件,然后手上传到服务器,最后移动到 /opt/cni/bin ,进入该目录执行

$ kubectl apply -f kube-flannel.yml

安装了以后就能查看了 flannel 已经跑起来了

# 查看状态 【kube-system是k8s中的最小单元】
kubectl get pods -n kube-system

节点的状态也已经变成了 Ready

五、部署一个Pod测试集群

#先安装一下Ngnix依赖的一个包,不安装Ngnix会报错起不来
$ yum install python-rhsm-certificates

#创建一个pod跑个ngnix
$ kubectl create deployment nginx --image=nginx

#暴露端口
$ kubectl expose deployment nginx --port=80 --type=NodePort
#查看一下对外的端口
$ kubectl get pod,svc

最后在我们的主机上访问一下试试