k8s环境搭建

文章目录

  • 1. 工作流程
  • 2. 虚拟机环境准备
  • 3. 部署集群
    • 3.1 准备工作
    • 3.2 安装docker
    • 3.3 安装kubeadm, kubelet, kubectl
    • 3.4 部署集群
    • 3.5 验证集群状态
      • 3.5.1 节点信息查看
      • 3.5.2 系统pod查看
    • 3.6 配置
      • 3.6.1 命令自动补全

1. 工作流程

2. 虚拟机环境准备

如果使用现成的服务器可忽略此步

  1. 克隆出三台机器

  2. 网络模式选择桥接, 方便局域网设备访问

  3. 网络适配器–高级–MAC地址–生成(每台机器点击一次, 避免因克隆导致MAC地址一样)

  4. 配置静态ip

    # 根据自己的网关配置静态ip, 避免IP发生变化的可能 sed -i 's/BOOTPROTO=dhcp/BOOTPROTO=static/' /etc/sysconfig/network-scripts/ifcfg-ens33 uuid=$(uuidgen ens33) sed -i 's/UUID=.*/UUID=$uuid/g' /etc/sysconfig/network-scripts/ifcfg-ens33 # 192.169.8.1-192.168.8.3, 使用不同的ip分别在不同的机器上执行 # ip地址及网关等信息根据自己的网络环境来 echo IPADDR=192.169.8.3 >> /etc/sysconfig/network-scripts/ifcfg-ens33 echo GATEWAY=192.169.1.1 >> /etc/sysconfig/network-scripts/ifcfg-ens33 echo NETMASK=255.255.0.0 >> /etc/sysconfig/network-scripts/ifcfg-ens33 echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-ens33 echo DNS1=114.114.114.114 >> /etc/sysconfig/network-scripts/ifcfg-ens33 echo DNS2=8.8.8.8 >> /etc/sysconfig/network-scripts/ifcfg-ens33 # 重启网络 service network restart

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  5. 配置主机名及hosts

    # 机器1
    hostnamectl set-hostname k8s-n-1
    sed -i 's/localhost.localdomain/k8s-n-1/g' /etc/hosts
    reboot
    # 机器2
    hostnamectl set-hostname k8s-n-2
    sed -i 's/localhost.localdomain/k8s-n-2/g' /etc/hosts
    reboot
    # 机器3
    hostnamectl set-hostname k8s-n-3
    sed -i 's/localhost.localdomain/k8s-n-3/g' /etc/hosts
    reboot
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  6. 检测网络环境是否正常

    ping www.baidu.com

    • 1
    • 1

3. 部署集群

无特殊说明下述命令需在所有机器分别执行

3.1 准备工作

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
setenforce 0 #临时

# 关闭swap, 禁止虚拟内存
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #临时

# 设置网桥参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效

# 时间同步, 非必须但此步能保证所有机器时间一致
yum install ntpdate -y
ntpdate time.windows.com
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3.2 安装docker

yum install -y wget # 换国内源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo # 安装最新版本, 这里不需要安装所有工具, 安装ce即可 yum install -y docker-ce mkdir -p /etc/docker # 换源并设置native.cgroupdriver为systemd(k8s推荐使用, 不设置会报警告) tee /etc/docker/daemon.json <<- EOF { 'registry-mirrors':['https://hub-mirror.c.163.com/'], 'exec-opts': ['native.cgroupdriver=systemd'] } EOF # 设置为开机自启并docker服务 systemctl enable docker.service systemctl start docker.service

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3.3 安装kubeadm, kubelet, kubectl

# 修改yum安装源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
# 不指定版本号, 安装最新版, 我安装时版本为1.22.1
yum install -y kubelet kubeadm kubectl
# 设置为开机自启并启动服务
systemctl enable kubelet.service
systemctl start kubelet.service
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.4 部署集群

在要作为master的机器上执行, 此处我在192.169.8.1上执行下述命令

# --apiserver-advertise-address 修改为自己的ip kubeadm init \ --apiserver-advertise-address=192.169.8.1 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.2.0.0/16 # 执行提示信息给出的命令 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 安装网络插件, 因镜像等原因启动的有点慢 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

安时遇到镜像coredns:v1.8.4从阿里云服务器上拉取不到的问题

发现是此镜像在阿里云仓库里tag是coredns:1.8.4, 导致使用v1.8.4拉取不到

解决方案是我们手动拉取此镜像并手动打一个与需求一致的tag

# 查询需要下载的镜像
kubeadm config images list
# 查询本地镜像
docker images
# 对比后发现只差coredns:v1.8.4了, 我们手动拉取一下镜像
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4
# 重新打一下tag, 使其与我们需要的镜像名一致
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
# 删除原有镜像
docker rmi registry.aliyuncs.com/google_containers/coredns:1.8.4
# 重新执行init
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在其余节点执行init返回的join命令

kubeadm join 192.169.8.1:6443 --token d07ihy.6p9zjow80lh7fklz \ --discovery-token-ca-cert-hash sha256:af7a6897afbfcdca6e46d4595ccb9cc28c0d1ed4141120c76cb18156a2641752

  • 1
  • 1

3.5 验证集群状态

3.5.1 节点信息查看

# 查询nodekubectl get nodeskubectl get nodekubectl get no
  • 1
  • 1

3.5.2 系统pod查看

# 查看集群相关pod是否正常启动kubectl get pods --all-namespaceskubectl get pods -n kube-system# -oxkubectl get pods -n kube-system -o wide

  • 1
  • 1

3.6 配置

3.6.1 命令自动补全

yum install -y bash-completion# 在 bash 中设置当前 shell 的自动补全source <(kubectl completion bash)# 在 bash shell 中永久的添加自动补全echo 'source <(kubectl completion bash)' >> ~/.bashrc# 可以为 kubectl 使用一个速记别名,该别名也可以与 completion 一起使用alias k=kubectlcomplete -F __start_kubectl k
  • 1
  • 1
(0)

相关推荐