Kubernetes部署环境准备

# 关闭防火墙

  • 关闭ufw防火墙,Ubuntu默认未启用,无需设置。

$ sudo ufw disable

sudo ufw status   查看防火墙状态

# 关闭selinux

  • ubuntu默认不安装selinux,假如安装了的话,按如下步骤禁用selinux 

 临时禁用(重启后失效)

$ sudo setenforce 0 #0代表permissive 1代表enforcing 

永久禁用 

$ sudo vi /etc/selinux/config

SELINUX=permissive  

# 关闭swap(k8s禁止虚拟内存以提高性能) 

禁掉所有的swap分区

 $ sudo swapoff -a

同时还需要修改/etc/fstab文件,注释掉 SWAP 的自动挂载,防止机子重启后swap启用。 

 

 备注:

  • Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动,虽然可以通过kubelet的启动参数–fail-swap-on=false更改这个限制,但不建议,最好还是不要开启swap。

# 在master添加hosts 

cat >> /etc/hosts << EOF

192.168.172.134 k8smaster

192.168.172.135 k8snode

EOF

 # 设置网桥参数

cat > /etc/sysctl.d/k8s.conf << EOF

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

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

EOF

sysctl --system  #生效

 # 时间同步

sudo apt-get install ntpdate
ntpdate cn.pool.ntp.org
hwclock --systohc
date 

 Kubernetes安装具体步骤

  • Kubernetes 默认容器运行环境是Docker,因此首先需要安装Docker;

 --参考ubuntu安装docker

 配置加速器加速下载 (设置成 国内镜像可以提高下载速度)

 开机自启docker

 systemctl enable docker.service   

  •  添加apt key以及阿里云源

sudo apt update && sudo apt install -y apt-transport-https curl

 添加 k8s 秘钥(二选一 选阿里)

# 谷歌
#curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# 阿里(建议选择)
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

 添加 k8s 镜像源(二选一 选阿里)

# 官方 镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# 阿里 镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

到时候下载k8s的相关组件才能找到下载源 

  •  安装 kubeadm,kubelet 和 kubectl

1.查看可用软件版本

$ apt-cache madison kubeadm

2.安装指定版本:

sudo apt-get install -y kubelet=1.18.3-00 kubeadm=1.18.3-00 kubectl=1.18.3-00

sudo apt-mark hold kubelet=1.18.3-00 kubeadm=1.18.3-00 kubectl=1.18.3-00

# apt-mark hold 安装标记  防止版本自动更新

3.设置开机自启动并运行kubelet: 

sudo systemctl enable kubelet && sudo systemctl start kubelet

Kubernetes集群安装 

master节点部署

提前下载所需镜像

 $ kubeadm config images list --kubernetes-version=v1.18.3

 然后执行这部直接把需要的镜像下载,然后 kubeadm init初始化集群 

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

 部署成功

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.1.175:6443 --token v1nj22.l30dctzysf2jynly --discovery-token-ca-cert-hash sha256:0170607e7e069ffde2f2b6b440e7982f066887e59db49e9a62ac9518924af690
 

 记下其中的token,加入node节点时会用到。

 检查kubelet使用的cgroup driver 

  • kubelet启动时指定的cgroup driver需要和docker所使用的保持一致。

1.查看 Docker 使用的 cgroup driver: 

 $ docker info | grep -i cgroup

-> Cgroup Driver: cgroupfs

2.查看kubelet指定的cgroup driver

Kubernetes文档中kubelet的启动参数–cgroup-driver string Driver that the
kubelet uses to manipulate cgroups on the host. Possible values:
‘cgroupfs’, ‘systemd’ (default
“cgroupfs”)。默认值为cgroupfs。yum安装kubelet、kubeadm时生成10-kubeadm.conf文件中可能将这个参数值改成了systemd。

查看kubelet的配置文件(1.12.0版本的封装在/var/lib/kubelet/kubeadm-flags.env文件中),如果是默认的cgroupfs,不需要修改。否则需要修改/etc/default/kubelet(或者/var/lib/kubelet/kubeadm-flags.env)

文件:

$ sudo vim /etc/default/kubelet
    KUBELET_KUBEADM_EXTRA_ARGS=--cgroup-driver=<value>    
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet

3.接下来在master机器上执行:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

 4. 设置master参与工作负载

  • 使用kubeadm初始化的集群,将master节点做了taint(污点),使得默认情况下(不设置容忍)Pod不会被调度到master上。这里搭建的是测试环境可以使用下面的命令去掉master的taint,使master参与工作负载:

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

#node/wangjiw untainted  启动成功标识

接下来把node节点加入Kubernetes master中,在Node机器上执行; 

向集群添加新节点,执行的命令就是kubeadm init最后输出的kubeadm join命令: 

kubeadm join 192.168.172.132:6443 --token wa5bif.zfuvbesevdfvf4of \

    --discovery-token-ca-cert-hash sha256:87cf5828d54dd80da13c4b57c57360370ea0267a7cc3991989ca3006cf3e44d8  

 kubectl get nodes   --(查询子节点是否成功)

4.2 网络部署 

  •  下载kube-flannel.yml文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 

  • 应用kube-flannel.yml文件得到运行时容器 

 kubectl apply -f kube-flannel.yml (在master机器上执行)

  •  然后查看节点状态: kubectl get nodes (在master机器上执行)

至此我们的k8s环境就搭建好了;

查看运行时容器pod (一个pod里面运行了多个docker容器)

kubectl get pods -n kube-system

 后续再继续介绍K8s部署容器化应用

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐