使用kubeadm安装部署k8s V1.12.1(两种方式)

版权声明:本文为小小呆原创文章,转载请注明出处! https://blog.csdn.net/gui951753/article/details/83316976

规划

预计使用三个节点来完成k8s的初次体验工作。结点规划如下表所示。

IP 节点角色 工作职责
192.168.217.129 master 对外暴露API,对内提供工作流的调度和配置
192.168.217.130 node1 承载着k8s运行的实际任务
192.168.217.131 node2 同node1相同

部署前提

  • 主机名称解析,(在/etc/hosts文件编辑相关信息即可)
# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
master 192.168.217.129
node1  192.168.217.130
node2  192.168.217.131
# master,node1,node2等节点的ip应按照自己的实际情况来填写。

将上述配置文件拷贝到集群中的所有节点,包括master节点和node节点。

  • 时间同步,(使用chrony服务实现)
    各个节点的操作如下:
yum -y install chrony 

vim /etc/chrony.conf

~~~
server master
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
~~~~
#注释掉原有的server内容,把原有的时钟同步服务设置为master结点上的时钟同步。

  • 关闭所有节点的iptables和firewalld以及selinux
iptables -F
systemctl stop firewalld
systemctl disable firewalld

配置yum仓库

所有节点都要配仓库

配置docker仓库

wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #从阿里云获取docker-ce的镜像文件,-P指定下载文件存放的目录 
yum -y install docker-ce 
# yum安装docker普通版 
systemctl start docker.service 
#开启docker 
systemctl enable docker.service 
#设置docker为开机自启动

配置k8s仓库

cat <<EOF > /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
EOF
setenforce 0

安装相关组件

各个结点上都安装相关组件

yum install  kubelet kubeadm kubectl 
#所有服务都设置为开机自启动
systemctl enable kubelet
 

结点的初始化与集群的横向扩展

初始化master节点

使用kubeadm配置master节点的时候,会存在拉取镜像的问题,其主要原因在于相关组件的镜像都在外网上,想要拉取这些镜像,主要有两种办法。

  • 在docker Unit File中的Environment中定义代理上网,这样docker在实际拉取镜像的时候,就能够通过代理去拉取镜像。
  • 在本地下载好相关的镜像,然后将镜像打包传到服务器上。

在此,先使用第一种方式代理上网(需要自己想办法到外网)
这是我经常使用的一个机场,通过我的邀请码注册的话,不需要验证化学方程式:
代理上网申请

1.1 在docker Unit File中定义代理上网,通过代理上网获取到相关镜像。没有代理的话,直接看1.2步骤即可。

vim /usr/lib/systemd/system/docker.service 
#打开docker的unit配置文件
[Service]
~~~
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"
~~~
#添加上相关代理的地址和端口


1.2 直接使用我打包好的镜像。
1.1或者1.2执行一个即可

链接:https://pan.baidu.com/s/1qFRUDZi8eYxsBEUI6n7Ugg
提取码:kx9k

rz -be 
# 上传镜像到相关节点上。
docker load -i k8s_master.tar 
#master节点上执行,获取master需要用到的镜像

docker image ls
#查看所需镜像是否都已经导入

REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.12.1             61afff57f010        3 weeks ago         96.6MB
k8s.gcr.io/kube-scheduler            v1.12.1             d773ad20fd80        3 weeks ago         58.3MB
k8s.gcr.io/kube-controller-manager   v1.12.1             aa2dd57c7329        3 weeks ago         164MB
k8s.gcr.io/kube-apiserver            v1.12.1             dcb029b5e3ad        3 weeks ago         194MB
k8s.gcr.io/etcd                      3.2.24              3cab8e1b9802        5 weeks ago         220MB
k8s.gcr.io/coredns                   1.2.2               367cdc8433a4        2 months ago        39.2MB
quay.io/coreos/flannel               v0.10.0-amd64       f0fad859c909        9 months ago        44.6MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        10 months ago       742kB

2.禁用节点上的swap,防止将来出现的意外问题。

swapoff -a 
sysctl -p

vim /ets/fstab
#去除该文件中关于swap那行。
  1. 开启路由转发功能以及iptables的过滤策略。
vim /etc/sysctl.d/k8s.conf


net.bridge.bridge-nf-call-ip6tables = 1
#开启iptables中ipv6的过滤规则
net.bridge.bridge-nf-call-iptables = 1
#开启ipv4的过滤规则
net.ipv4.ip_forward = 1
#开启服务器的路由转发功能

执行命令使修改生效。

modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

3.初始化master节点

kubeadm init  --kubernetes-version=v1.12.1  --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.217.129
#--kubernetes-version指明要下载的镜像版本
#--pod-network-cidr 指明网络的子网掩码,此处使用flannel模型的子网掩码
#--apiserver-advertise-address 指明与master结点绑定的ip

保存初始化后的那段话,将来新加入结点或者做别的操作的时候,可能会用到相关内容。
一定要保存初始化后面的那段话,在你加入新节点的时候,很可能会用到,每个人都不太一样。

Your Kubernetes master 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/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 192.168.217.129:6443 --token vtqzkt.j0u1chomafn1offd --discovery-token-ca-cert-hash sha256:c25549dc8457677752b8d1b0547acfa8be742cbd5734802b6d2e3e9a6e7e1b73

4.配置常规用户如何使用kubectl访问集群
新建一个用户k8s,并给予其sudo权限,之后对于k8s的操作都是用这个k8s用户。

useradd k8s 
passwd k8s
# 创建用户,并对创建的用户设置密码

chmod u+w /etc/sudoers
vim /etc/sudoers
#找到 root ALL这一行
#复制粘贴这行内容,同时将名字修改为k8s即可
chmod u-w /etc/sudoers

切换到k8s用户身份,执行以下命令。

su - k8s 

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

5.配置命令补全功能

echo "source <(kubectl completion bash)" >> ~/.bashrc

6.配置flannel网络功能

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 下载flannel的yaml文件
kubectl apply -f  kube-flannel.yml
# 执行这个文件生成flannel的pods

添加一个新的节点到集群

1.永久关闭掉swap。

swapoff -a     
vim /etc/fstab 
# 删除掉文件中关于swap的一行


2.1 配置docker代理上网,以便拉取镜像。没有代理的话,通过2.2使用我打包好的镜像。

vim /usr/lib/systemd/system/docker.service 
#打开docker的unit配置文件
[Service]
~~~
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"
~~~
#添加上相关代理的地址和端口

2.2 ,如果没有代理的话,导入打包好的镜像。

链接:https://pan.baidu.com/s/1xnc7w2HGl5DF7V0-vSFTnQ
提取码:jq9d
2.1或者2.2执行一个即可

rz -be 
# 将pc上的tar文件上传到相关节点上。

docker load -i k8s_ndoe.tar 
#node节点上执行,获取node需要用到的镜像
docker image ls
#查看所需镜像是否都已经导入
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy    v1.12.1             61afff57f010        3 weeks ago         96.6MB
quay.io/coreos/flannel   v0.10.0-amd64       f0fad859c909        9 months ago        44.6MB
k8s.gcr.io/pause         3.1                 da86e6ba6ca1        10 months ago       742kB

3.开启路由转发功能以及iptables的过滤策略。

vim /etc/sysctl.d/k8s.conf


net.bridge.bridge-nf-call-ip6tables = 1
#开启iptables中ipv6的过滤规则
net.bridge.bridge-nf-call-iptables = 1
#开启ipv4的过滤规则
net.ipv4.ip_forward = 1
#开启服务器的路由转发功能

执行命令使修改生效。

modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

4.执行加入节点的命令

kubeadm join 192.168.217.129:6443 --token vtqzkt.j0u1chomafn1offd --discovery-token-ca-cert-hash sha256:c25549dc8457677752b8d1b0547acfa8be742cbd5734802b6d2e3e9a6e7e1b73

5.在mster结点上执行命令查看结果

kubectl get nodes 

NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   171m   v1.12.1
node1    Ready    <none>   11m    v1.12.1
#得到这样的结果说明已经能够成功使用了

小结

尚有两个问题没有解决。

  • 1.目前的集群中使用的是iptables进行负载均衡,实际上可以使用性能更好的ipvs,有待后面研究。
  • 2.集群中现在的网络是flannel,后面考虑如何平稳的过渡为calico网络模型。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试