ubuntu搭建Kubernetes集群

版权声明:本文为博主原创文章,转载请注明来源。开发合作联系[email protected] https://blog.csdn.net/luanpeng825485697/article/details/82950742

每个主机切换到root用户,
k8s各节点SSH免密登录。
各节点时间同步。
各节点主机名和IP加入/etc/hosts解析
各Node必须关闭swap:swapoff -a,否则kubelet启动失败。

设置每个节点的主机信息

1、master上执行:

a) 设置主机名称命令:hostnamectl --static set-hostname k8s-master
b) 关闭防火墙命令:

   systemctl disable firewalld.service
   systemctl stop firewalld.service

c) 设置hosts命令:

echo '192.168.72.183    k8s-master
192.168.72.183   etcd
192.168.72.183   registry
192.168.72.184   k8s-node-1' >> /etc/hosts

2、 minion上执行:

a) 设置主机名称命令:hostnamectl --static set-hostname k8s-node-1
b) 关闭防火墙命令:

systemctl disable firewalld.service
systemctl stop firewalld.service

c) 设置hosts命令:

echo '192.168.72.183    k8s-master
192.168.72.183   etcd
192.168.72.183   registry
192.168.72.184   k8s-node-1' >> /etc/hosts

1、设置主机之间ssh无密码登录。

本地系统执行 ssh-keygen -t rsa 命令,生成密钥文件

本地机器执行命令如:ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected], 将公钥文件传输的远程机器,并生效。

注意:

  • 免密码登录的处理是用户对用户的,切换其他用户后,仍然需要输入密码
  • 公钥传到远程机器并生效的操作,可用其他方式实现,如scp后修改authorized_keys
  • 远程机器的.ssh目录需要700权限,authorized_keys文件需要600权限

2、每个主机节点安装docker

下面的命令安装docker,多运行几次,有时网络不好会出错。

curl -sSL https://get.daocloud.io/docker | sh

卸载docker

sudo apt-get remove docker docker-engine

卸载Docker后,/var/lib/docker/目录下会保留原Docker的镜像,网络,存储卷等文件. 如果需要全新安装Docker,需要删除/var/lib/docker/目录

rm -fr /var/lib/docker/

3、部署k8s集群(脚本全自动)

注意:目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本。

使用自动化脚本,脚本下载地址:https://github.com/626626cdllp/k8s/tree/master/kubernetes

源码下载好后,需要修改配置文件:

root# cd kubernetes/cluster/ubuntu
root# vim config-default.sh

要修改三个地方:

  1. export nodes=${nodes:-"[email protected] [email protected] [email protected]"} 这里是三个节点,有几个就配几个
  2. role=${role:-"ai i i"}这里的值与上面的对应,ai表示既是master又是minion,i表示minion节点。
  3. export NUM_NODES=${NUM_NODES:-3}这里的数字对应节点的个数

然后默认下载的二进制执行文件的版本比较老,我们修改以下,使用比较新的版本:
还是在kubernetes/cluster/ubuntu文件夹下,打开download-release.sh文件,修改如下几行:

FLANNEL_VERSION=${FLANNEL_VERSION:-"0.5.5"}
ETCD_VERSION=${ETCD_VERSION:-"2.2.1"}
KUBE_VERSION=${KUBE_VERSION:-"1.1.7"}

保存上面两个文件。

下面就开始部署了,kubernetes的部署挺傻瓜的,首先进入kubernetes/cluster文件夹下,执行如下命令:

root# KUBERNETES_PROVIDER=ubuntu ./kube-up.sh

其中KUBERNETES_PROVIDER指明了在Ubuntu上部署集群。

运行此命令后,kubernetes首先根据指定的版本下载flanneld,etcd,kubernetes的可执行文件,由于国内网速较慢,可能需要一些时间,此后的工作会自动完成。

执行成功后,另外打开一个控制台,使用kubectl get nodes测试是否搭建成功:

chy@chy-station:~$ kubectl get nodes
NAME           LABELS                                STATUS    AGE
10.203.2.233   kubernetes.io/hostname=10.203.2.233   Ready     1h
10.203.2.239   kubernetes.io/hostname=10.203.2.239   Ready     1h
10.203.2.243   kubernetes.io/hostname=10.203.2.243   Ready     1h

以上信息表示集群搭建成功。

关闭集群是在kubernetes/cluster文件夹下执行

root# KUBERNETES_PROVIDER=ubuntu ./kube-down.sh

4、部署k8s集群(使用kubeadm安装)

参考:http://blog.51cto.com/newfly/2288088

不过要求的电脑能够翻墙。

以root用户ssh到每台机器上,运行:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
# 先安装docker
apt-get install -y docker.io
apt-get install -y kubelet kubeadm kubectl kubernetes-cni

后续参考:https://www.jianshu.com/p/602c5bdbbd4d

5、部署k8s集群(手动安装)

下载etcd

在部署机上下载etcd

ETCD_VERSION=${ETCD_VERSION:-"3.3.9"}
ETCD="etcd-v${ETCD_VERSION}-linux-amd64"
curl -L https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/${ETCD}.tar.gz -o etcd.tar.gz

tar xzf etcd.tar.gz -C /tmp
cd /tmp/etcd-v${ETCD_VERSION}-linux-amd64

for h in master node1 node2 node3 node4; do ssh user@$h mkdir -p '$HOME/kube' && scp -r etcd* user@$h:~/kube; done
for h in master node1 node2 node3 node4; do ssh user@$h 'sudo mkdir -p /opt/bin && sudo mv $HOME/kube/* /opt/bin && rm -rf $home/kube/*'; done

上面的代码要实现的目的就是到github上下载压缩包,然后scp到各个主机节点。所以你可以手动执行上面的操作。

手动到github上下载etcd release (https://github.com/etcd-io/etcd/releases) 的.tar.gz包,解压。通过scp复制 etcd 和etcdctl到各个主机(每台主机需要配置ssh)。然后复制到/opt/bin目录下。

root@localhost:/opt/bin# ls
Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md

配置etcd服务

在每台主机上,分别创建/opt/config/etcd.conf和/lib/systemd/system/etcd.service文件,(注意修改IP地址,和主机名)

/opt/config/etcd.conf

sudo mkdir -p /var/lib/etcd/
sudo mkdir -p /opt/config/
sudo  cat <<EOF |  sudo tee /opt/config/etcd.conf
ETCD_DATA_DIR=/var/lib/etcd
ETCD_NAME=etcd5
ETCD_INITIAL_CLUSTER=etcd5=http://10.107.20.5:2380,etcd6=http://10.107.20.6:2380,etcd7=http://10.107.20.7:2380,etcd8=http://10.107.20.8:2380,etcd9=http://10.107.20.9:2380
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_LISTEN_PEER_URLS=http://10.107.20.5:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.107.20.5:2380
ETCD_ADVERTISE_CLIENT_URLS=http://10.107.20.5:2379
ETCD_LISTEN_CLIENT_URLS=http://10.107.20.5:2379,http://127.0.0.1:2379
GOMAXPROCS=$(nproc)
EOF

此处五台主机的ETCD_NAME为etcd 5-9,可修改ETCD_NAME为自己起得名字(相应的ETCD_INITIAL_CLUSTER中对应五个名字)。每台主机上修改ETCD_LISTEN_PEER_URLS、ETCD_INITIAL_ADVERTISE_PEER_URLS、ETCD_ADVERTISE_CLIENT_URLS、ETCD_LISTEN_CLIENT_URLS为本机的ip。

/lib/systemd/system/etcd.service

[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target


[Service]
User=root
Type=simple
EnvironmentFile=-/opt/config/etcd.conf
ExecStart=/opt/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

然后在每台主机上运行如下命令,将etcd加入开机服务并启动

sudo systemctl daemon-reload 
sudo systemctl enable etcd
sudo systemctl start etcd

部署K8s Master

下载Flannel

FLANNEL_VERSION=${FLANNEL_VERSION:-"v0.7.0"}
curl -L https://github.com/coreos/flannel/releases/download/v${FLANNEL_VERSION}/flannel-${FLANNEL_VERSION}-linux-amd64.tar.gz flannel.tar.gz
tar xzf  flannel.tar.gz -C /tmp

如etcd一般,可手动到github上下载,解压到/tmp。 https://github.com/coreos/flannel/releases

猜你喜欢

转载自blog.csdn.net/luanpeng825485697/article/details/82950742