创建Kubernetes集群

有多种方式创建Kubernetes集群,可以在本地创建集群,也可以在云端创建集群(Ali Cloud,AWS,Azure)。本教程将关注于如何在本地创建集群。

本篇将介绍多台服务器建集群,单台服务器建集群。

1、环境准备

Centos, 内存 4G

关闭防火墙

systemctl status firewalld.service #查看防火墙状态`

systemctl stop firewalld.service  #关闭运行的防火墙

禁用selinux

getenforce #查看状态
setenforce 0 # 暂时关闭
vi /etc/selinux/config  && SELINUX=disabled  # 永久关闭

关闭swap分区

#1、关闭
swapoff -a 

# 2、更改配置
vim /etc/fstab && 注释或者删除行:  /mnt/swap swap swap defaults 0 0 

# 3、确认
free -m        #若swap行都显示 0 则表示关闭成功

# 4 调整 swappiness 参数
echo 0 > /proc/sys/vm/swappiness # 临时生效
vim /etc/sysctl.conf # 永久生效
#修改 vm.swappiness 的修改为 0
vm.swappiness=0
sysctl -p   # 使配置生效

修改桥接流量配置

确保br_netfilter模块加载,加载: sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sudo sysctl --system

检查6443端口是否开放

telnet 127.0.0.1 6443

安装docker

使用阿里云镜像

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

2、安装 kubelet / kubeadm / kubectl

使用阿里云的源:阿里云镜像

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
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

3、安装集群

使用 kubeadm 安装集群

3.1 配置master

在 server-01 上完成 【1、环境准备】 与 【2、安装 kubelet / kubeadm / kubectl】

kubeadm init  --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers

pod-network-cidr: 指定pod网络的IP地址范围。如果设置,控制平面将为每个节点自动分配CIDRs。

安装成功后,终端会有如下输出,此输出后续有用:

CSI 在Kubernetes 中的应用 kubernetes swap_docker

然后执行:

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

执行:

kubectl get pod -A

可以看到安装的pod

安装flannel网络插件:

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

或者: kubectl apply -f kube-flannel.yml

检查健康状态:

kubectl get cs

CSI 在Kubernetes 中的应用 kubernetes swap_docker_02

查看pod状态:

kubectl get pod -A

类似:

CSI 在Kubernetes 中的应用 kubernetes swap_linux_03

3.2 在新服务器上配置节点【多台服务器建集群】

在节点服务器 server-02 上 完成【1、环境准备】 与 【2、安装 kubelet / kubeadm / kubectl】

然后加入master:

kubeadm join 172.17.162.106:6443 --token 2hs4xh.bjrrd4lhiumg6pvm \
	--discovery-token-ca-cert-hash sha256:91caa23f616e0f2f810c6cc243aa551d2480700f7d1c4acf323f07fe748e8d60

172.17.162.106 位master (server-01) 的 ip

token与discovery-token-ca-cert-hash参数为 【配置master】中的控制台输出。

执行:

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

之后也是 安装flannel网络插件。

然后可以在master上查看节点情况:

kubectl get nodes

然后在node上就可以安装pod,service

3.3 在master上配置节点【单台服务器建集群】

在默认情况下,出于安全原因,在master节点上不允许运行调度pod。在本例子中,为了方便部署可运行的单节点k8s集群,将关闭这个限制。

在master 上执行:

kubectl taint nodes --all node-role.kubernetes.io/master-

然后可以在master上查看节点情况:

kubectl get nodes

CSI 在Kubernetes 中的应用 kubernetes swap_linux_04

然后就可以在master上安装pod,service

4、测试nginx

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080

执行:

kubectl apply -f  nginx-deployment.yaml

然后查看pod状态

kubectl get pod -A

浏览器中访问:

http://nodeIP:30080