Kubernetes集群搭建

163 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

Kubernetes集群搭建(单master版本)

环境

主机操作系统ipdocker versionkubelet version
masterCentos 7.6.1810192.168.3.19018.09.61.16.4
node01Centos 7.6.1810192.168.3.19118.09.61.16.4
node02Centos 7.6.1810192.168.3.19218.09.61.16.4

准备

安装工具包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git lrzsz zip unzip

安装命令补全

yum -y install bash-completion
source /etc/profile.d/bash_completion.sh

安装Docker(18.09.6 版本), 配置镜像加速, ...略

yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

主机配置

  • 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
  • 禁止分区交换
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  • 关闭SELINUX
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

配置hosts

vim /etc/hosts
192.168.3.190 master
192.168.3.191 node01
192.168.3.182 node02

修改内核参数

vim  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 立即生效
sysctl -p /etc/sysctl.d/k8s.conf

修改Cgroup Driver(修改cgroupdriver是为了消除告警)

vim /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl daemon-reload && systemctl restart docker

添加kubernetes源

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=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

更新缓存

yum clean all && yum -y makecache

安装

安装kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4

yum list kubelet --showduplicates | sort -r 
yum install -y kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4
systemctl enable kubelet && systemctl start kubelet

kubelet命令补全

echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile

下载镜像(由于网络问题, 这里采用脚本从阿里云仓库拉取)

  • vim k8s-images.sh
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.16.4
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
  docker pull $url/$imagename
  docker tag $url/$imagename k8s.gcr.io/$imagename
  docker rmi -f $url/$imagename
done
  • 赋权限并执行脚本开始下载镜像
chmod u+x k8s-images.sh
./k8s-images.sh

初始化master节点kubeadm

kubeadm init --kubernetes-version 1.16.4 --apiserver-advertise-address 192.168.3.190 --pod-network-cidr 10.244.0.0/16

初始化完成后按照提示操作(提示如下)

image.png

安装pod网络

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

加入集群, 分别在node01和node02上执行

kubeadm join 192.168.3.193:6443 --token 92ywrh.3x73udki8zkrici1 \
    --discovery-token-ca-cert-hash sha256:db33c191de78e87d690a2f91f0000dcf2c5c10adbdf31c3efdae1aed6b3ede0d 

验证

nginx.yaml

apiVersion: apps/v1   
kind: Deployment            
metadata:                     
  name: nginx      
spec:                       
  selector:
    matchLabels:
      app: nginx 
  replicas: 3                 
  template:                  
    metadata:                
      labels:                 
        app: nginx             
    spec:                       
      containers:               
      - name: nginx             
        image: nginx:latest    

创建nginx并暴露端口

kubectl apply -f nginx.yaml
kubectl expose deployment nginx-master --port=80 --target-port=80

查看,修改svc,将type:ClusterIP改为type:NodePort

kubectl get svc
kubectl  edit svc nginx

查看信息

  • 查看节点
kubectl get nodes
  • 查看pod
kubectl get pod --all-namespaces
  • 查看副本
kubectl get deployments
  • 查看deployment详细信息
kubectl describe deployments

安装Dashboard kubernetes-dashboard.yaml

部署访问

  • 创建dashboard
kubectl apply -f kubernetes-dashboard.yaml 
  • 获取登录令牌
kubectl get deployment kubernetes-dashboard -n kube-system
  • 使用令牌访问, 注意是https, toke失效很短, 可以修改, 或者使用Kubeconfig方式登录
kubectl describe secrets -n kube-system dashboard-admin

证书

查看证书信息, 生成的证书默认有效期是1年, 失效之后服务就不可用了 可以使用脚本将证书有效期更新

openssl x509 -in apiserver.crt -text -noout