dmli的博客小屋

专注IT运维

kubernetes (k8s) v1.13版本安装简记

一、服务器准备

实验环境准备了三台Centos7虚拟机,一台master,两台nodes:

master: 192.168.227.131

node1: 192.168.227.132

node1: 192.168.227.133

安装前检查:

1、关闭firewalld,关闭selinux,禁用swap(swapoff /dev/mapper/centos-swap);

2、设置hostsname,并写入hosts文件;

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

3、确保hostname和mac地址和product_uuid的唯一性

cat /sys/class/dmi/id/product_uuid

二、在master和node上安装docker

master和node都需要安装docker,这里我装的是docker-ce,并选用阿里云yum源进行安装。

vim /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

这里注意一点,直接 yum install docker-ce的话,会安装最新的18.09.0版本,但与当前最新的k8s v1.13版本不兼容,这里我直接安装兼容的最新版本18.06.1:

查看版本号

yum list docker-ce --showduplicates|sort -r

安装docker-ce

yum install docker-ce-18.06.1.ce-3.el7 -y
systemctl start docker
systemctl enable docker

docker默认使用dockerhub下载镜像,速度很慢,我们需要配置使用中国区镜像站

vim /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
systemctl daemon-reload
systemctl restart docker

三、master和node上安装k8s

master和node节点都需要安装kubelet、kubeadm和kubectl三个应用:

kubelet:负责启动pod和容器。

kubeadm:用于初始化Cluster。

kubectl:命令行工具,用于部署和管理应用,查看各种资源,创建、删除和更新各种组件。

在这里,同样需要配置阿里云yum源进行安装:

vim /etc/yum.repos.d/k8s.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
yum install kubeadm kubelet kubectl -y
systemctl start kubelet
systemctl enable kubelet

开启二层转发过滤

vim /usr/lib/sysctl.d/00-system.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 确认配置
sysctl --system

四、master上初始化k8s集群

我们使用kubeadm工具来初始化集群,在初始化过程中,回到google的容器仓库下载镜像,但显然我们是不可能下载成功的。网上有很多方法解决这个问题,总结起来思路就是,通过阿里云、github或者其他能下载到镜像的地方做中转,把镜像拉到节点本地,然后再在本地把镜像重新打上标签,让kubeadm认为镜像已经存在本地,就不会去google仓库下载了。

我这里使用了一个大家用的较多的公开镜像仓库,首先获取我们需要的镜像名称:

kubeadm config images list

image.png

那个警告说的是无法在线获取k8s版本,可以忽略。

从阿里云公开镜像站下载上面这些镜像(所有节点都执行):

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6

给镜像打标签:

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.1 k8s.gcr.io/kube-apiserver:v1.13.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.1 k8s.gcr.io/kube-controller-manager:v1.13.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.1 k8s.gcr.io/kube-scheduler:v1.13.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.1 k8s.gcr.io/kube-proxy:v1.13.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6

以上两步可以用一个脚本实现:

#!/bin/bash

result=`kubeadm config images list|grep k8s.gcr.io|awk -F/ '{print $2}'`
for image in ${result[@]}
do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
done

执行初始化命令:

kubeadm init --apiserver-advertise-address=192.168.227.131 --pod-network-cidr=10.244.0.0/16

这里有个pod网络地址范围,需要和下一步的配置文件里的"Network"参数保持一致,我试图修改成自定义的,导致pod无法启动。先默认吧~

记录一下屏幕输出的token信息,后面会用到

kubeadm join 192.168.227.131:6443 --token 562aya.ycjduq535bndyc42 --discovery-token-ca-cert-hash sha256:9095fe34aca40c4a704dce78dec67e0aa4a70de0b42fc655d0faf749c50527f3

这个token有效期为24小时,过期了需要重新生成:

kubeadm token create
kubeadm token list

root用户需要使用kubectl命令的话,需要做个操作:

echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> /etc/profile
source /etc/profile

配置kubectl命令自动补全:

echo 'source <(kubectl completion bash)' >> /etc/profile
source /etc/profile

然后我们就可以安装网络插件了,k8s支持多种网络模型,初学者我这里按教程先装Flannel试试,在master上执行:

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

五、加入node节点

先给node节点也打上镜像标签:

#!/bin/bash

result=`kubeadm config images list|grep k8s.gcr.io|awk -F/ '{print $2}'`
for image in ${result[@]}
do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
done

在两台node上分别执行加入命令,加入集群:

kubeadm join 192.168.227.131:6443 --token 562aya.ycjduq535bndyc42 --discovery-token-ca-cert-hash sha256:9095fe34aca40c4a704dce78dec67e0aa4a70de0b42fc655d0faf749c50527f3

在master上查看集群状态

kubectl get nodes
kubectl get pod --all-namespaces

node状态为“Ready”,pod状态为“Running”,代表集群创建成功并运行正常

image.png

六、ubuntu18系统的安装k8s

对于ubuntu18系统,有些配置方法跟CentOS还是不一样的,下面记录一些差异点:

1、网卡配置文件更新为“/etc/netplan/50-cloud-init.yaml”,重启网络命令为“sudo netplan apply”。

2、使用命令“hostnamectl set-hostname”修改hostname,且修改配置文件“/etc/cloud/cloud.cfg”的一个配置项,才能使其重启仍然生效。

preserve_hostname: true

3、修改dns的配置文件为“/etc/systemd/resolved.conf”。

4、ubuntu18修改内核参数方法:

配置文件:/etc/sysctl.conf

net.ipv4.ip_forward = 1

配置文件:/etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

5、开启允许内存限制参数:

/etc/default/grub 中添加一行:

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

更新grub并重启

sudo update-grub
sudo reboot

6、安装docker-ce和k8s的apt源:

sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

/etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu bionic main restricted
deb http://mirrors.aliyun.com/ubuntu bionic-updates main restricted
deb http://mirrors.aliyun.com/ubuntu bionic universe
deb http://mirrors.aliyun.com/ubuntu bionic-updates universe
deb http://mirrors.aliyun.com/ubuntu bionic multiverse
deb http://mirrors.aliyun.com/ubuntu bionic-updates multiverse
deb http://mirrors.aliyun.com/ubuntu bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu bionic-security main restricted
deb http://mirrors.aliyun.com/ubuntu bionic-security universe
deb http://mirrors.aliyun.com/ubuntu bionic-security multiverse
deb http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable
deb http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

注意,阿里云镜像站目前还没有ubuntu18(bionic)的k8s源,这里配置的ubuntu16(xenial)源也能用。

发表评论:

Copyright© dmli 2015-2019