通常情况下,k8s都是以集群的方式运行的,所以一般都至少会有一个master节点和一个worker节点,master节点负责整个集群的管理工作,而worker节点则负责具体的任务。当然,k8s也是可以只有一个master节点既负责集群管理也负责任务执行的,在这里主要还是讨论如何部署简单集群。

安装前准备,VMware下创建两台虚拟机,系统为:CentOS 7.5,用途如下:

hostnameIP用途
k8s-master192.168.0.107用做master
k8s-node192.168.0.227用做worker

安装步骤:

基础步骤:

针对两台机器都需要进行操作的步骤如下:

1、配置hostname

hostnamectl set-hostname k8s-master     (机器:192.168.0.107)

hostnamectl set-hostname k8s-node        (机器:192.168.0.227)

使用命令:hostname,查看当前主机名是否修改成功

[root@localhost ~]# hostname
k8s-master

2、添加主机名与IP映射

[root@localhost ~]# vim /etc/hosts

添加如下内容:

192.168.0.107   k8s-master
192.168.0.227   k8s-node

3、关闭防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

4、关闭selinux

[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

5、关闭swap

[root@localhost ~]# swapoff -a
[root@localhost ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab

6、升级Linux内核到最新的长期支持的内核版本

#内核库
yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
#升级内核为lt版本
yum --disablerepo='*' --enablerepo=elrepo-kernel install kernel-lt
也可以安装指定版本,查看ELRepo支持的版本命令如下:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#设置默认启动新内核
grub2-set-default 0
#重启
reboot
#查看内核版本
uname -mrs
内核版本成功升级到版本:Linux 4.4.218-1.el7.elrepo.x86_64 x86_64

7、同步集群时间

同步时间的常见方式有:ntp和chrony,CentOS7推荐使用的是chrony,已经默认安装,可以使用如下命令查看是否安装:

rpm -qa |grep chrony

systemctl status chronyd命令查看服务状态,默认是开机启动,并且开机同步时间

如果有发现时间未同步的,可以自行百度如何同步时间

8、配置系统参数

vim /etc/sysctl.d/k8s.conf

添加如下内容:

net.ipv4.ip_nonlocal_bind = 1    
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_local_port_range = 10000 65000
fs.file-max = 2000000
net.ipv4.ip_forward = 1
vm.swappiness = 0

执行命令:sysctl --system,使配置生效,否则需要重启才生效

9、安装Docker

不同版本的k8s需要对应的docker版本,如果想安装不同版本的k8s可以自行百度一下对应的Docker版本

#卸载旧版本docker
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
#安装docker所需的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#配置镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#列出docker的版本
yum list docker-ce --showduplicates |sort -r
#安装指定版本的docker
yum install docker-ce-18.06.3.ce-3.el7
#启动docker
systemctl start docker
#设置开机启动
systemctl enable docker

10、配置docker

vim /etc/docker/daemon.json

添加如下内容:

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

重启docker:

systemctl daemon-reload
systemctl restart docker

11、设置iptables为legacy模式

update-alternatives --set iptables /usr/sbin/iptables-legacy

12、配置k8s镜像源:

vim /etc/yum.repos.d/kubernetes.repo

添加内容:

[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

注:gpgcheck和repo_gpgcheck设置为0,否则容易校验不通过

13、安装k8s

#安装k8s基础组件
yum install kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kubernetes
#设置kubelet开机启动,并启动
systemctl enable --now kubelet
#修改kubelet的默认驱动
echo "KUBELET_EXTRA_ARGS=--cgroup-driver=systemd" >  /etc/sysconfig/kubelet

k8s-master特有步骤:

1、用kubeadm初始化master节点

kubeadm init \
  --apiserver-advertise-address=192.168.0.107 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.16.2 \
  --pod-network-cidr=10.244.0.0/16

#--apiserver-advertise-address设置为自己的k8s-master主机的ip
#我这边安装过程中出现报错: 
#failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: #connection refused.
#执行删除命令:
#rm -rf /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
#rm -rf /etc/kubernetes/*
#重新执行kubeadm的初始化命令,成功输出如下:

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 192.168.0.107:6443 --token 9lsqnu.p7gl8tmi82omgkyv \
    --discovery-token-ca-cert-hash sha256:b61844c438a01864b74bd2bb401075dc31e2d9e5b6eb09c416999e6708670f91

#kubeadm join这句命令需要保存好,之后在从节点加入主节点集群时需要

2、配置kubectl

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

3、配置flannel网络插件

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

k8s-node节点执行步骤:

kubeadm join 192.168.0.107:6443 --token 9lsqnu.p7gl8tmi82omgkyv \
    --discovery-token-ca-cert-hash sha256:b61844c438a01864b74bd2bb401075dc31e2d9e5b6eb09c416999e6708670f91
#kubeadm join这段命令是由master执行kubeadm init成功之后生成的
#如果报错:/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
#请执行:echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

在k8s-master节点执行:kubectl get nodes

可以看到如下信息:

NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   31m   v1.16.2
k8s-node     Ready    <none>   85s   v1.16.2
在k8s-master执行如下命令,完成集群部署:

kubectl label node k8s-node node-role.kubernetes.io/worker=worker

重新执行命令:kubectl get nodes

可以看到如下信息:

NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   33m     v1.16.2
k8s-node     Ready    worker   3m47s   v1.16.2

k8s dashboard的安装可以参考下面的文章:

https://www.jianshu.com/p/f7ebd54ed0d1

Logo

开源、云原生的融合云平台

更多推荐