kubernetes、k8s安装

centos7搭建k8s集群(v1.19.x)

一、部署环境


共有3台服务器 1台master,2台node。

二、安装准备工作

1 关闭防火墙

systemctl stop firewalld && systemctl disable firewalld 

2 永久关闭selinux

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config;cat /etc/selinux/config 

3修改主机名, 三个机器对应分别执行

hostnamectl set-hostname master
hostnamectl set-hostname node01
hostnamectl set-hostname node02
退出重新登陆即可显示新设置的主机名master

4修改hosts文件

cat >> /etc/hosts << EOF
192.168.214.128    master
192.168.214.129    node01
192.168.214.130    node02
EOF

5禁用swap

swapoff -a
sed -i.bak '/swap/s/^/#/' /etc/fstab

6内核参数修改

#flannel网络需要设置内核参数bridge-nf-call-iptables=1
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

立即生效:
sysctl -p /etc/sysctl.d/k8s.conf

7新增kubernetes源

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

##########################
    [] 中括号中的是repository id,唯一,用来标识不同仓库
    name 仓库名称,自定义
    baseurl 仓库地址
    enable 是否启用该仓库,默认为1表示启用
    gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证
    repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证
    gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了

8更新缓存

yum clean all
yum -y makecache

9. 安装命令补全

9.1 安装bash-completion
yum -y install bash-completion

9.2 加载bash-completion
source /etc/profile.d/bash_completion.sh

三、Docker安装(已安装可跳过)

master node节点都执行本部分操作。

1. 安装依赖包

yum install -y yum-utils   device-mapper-persistent-data   lvm2

2. 设置Docker源

#推荐使用国内的
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 安装Docker CE

3.1 docker可安装版本查看
yum list docker-ce --showduplicates | sort -r

3.2 安装docker
yum install docker-ce-19.03.13 docker-ce-cli-19.03.13 containerd.io -y

4. 启动Docker并开机自启

systemctl start docker
systemctl enable docker

5. 配置镜像加速

由于Docker Hub的服务器在国外,下载镜像会比较慢,可以配置镜像加速器

5.1 配置daemon.json文件:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://23h04een.mirror.aliyuncs.com"]
}
EOF

5.2 重启服务
systemctl daemon-reload
systemctl restart docker

6. 修改Cgroup Driver

6.1 修改daemon.json 新增‘”exec-opts”: [“native.cgroupdriver=systemd”’
修改cgroupdriver是为了消除告警:
[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/

vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://23h04een.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

6.2 重启docker
systemctl daemon-reload
systemctl restart docker

四、k8s安装

master node节点都执行本部分操作。

1. 可安装版本查看

yum list kubelet --showduplicates | sort -r

2. 安装kubelet、kubeadm和kubectl

2.1 安装
yum install -y kubelet-1.19.2 kubeadm-1.19.2 kubectl-1.19.2
  #kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
  #kubeadm 用于初始化集群,启动集群的命令工具
  #kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

2.2 启动kubelet并设置开机启动
systemctl enable kubelet && systemctl start kubelet

2.3 kubectl命令补全
echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile 

3. 下载镜像

3.1 镜像下载的脚本
Kubernetes几乎所有的安装组件和Docker镜像都放在goolge自己的网站上,直接访问可能会有网络问题
解决办法:
    是从阿里云镜像仓库下载镜像,拉取到本地以后改回默认的镜像tag。使用如下脚本实现。

vim image.sh 
#!/bin/bash
url=registry.aliyuncs.com/google_containers
version=v1.19.2
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

#url为阿里云镜像仓库地址,version为安装的kubernetes版本。

3.2 运行脚本image.sh下载镜像,可手动修改“version=v1.19.2”以下载指定版本的镜像
sh image.sh
# 注意 :每个节点都要执行,否则部分k8s必要的容器创建不成功

五、初始化Master

master节点执行本部分操作。

1. master初始化

kubeadm init --apiserver-advertise-address=192.168.214.128 --kubernetes-version v1.19.2 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

#记录上述面命令安装成功后的输出,后面需要这个命令将node节点和其他control plane节点加入集群中。
    kubeadm join 192.168.2.128:6443 --token bkd3bh.fg7k5hvxxx     --discovery-token-ca-cert-hash sha256:cd801428210a1xxx

#如果初始化失败,可执行kubeadm reset后重新初始化
kubeadm reset
rm -rf $HOME/.kube/config

2. 加载环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source .bash_profile

3. 安装flannel网络

3.1 配置host
因为国内网络无法解析raw.githubusercontent.com,因此先访问https://tool.chinaz.com/dns/?type=1&host=raw.githubusercontent.com&ip=
查看raw.githubusercontent.com的真实IP,并对应修改host

cat >> /etc/hosts << EOF
151.101.108.133    raw.githubusercontent.com
EOF

3.2 在master上创建建flannel网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

3.3 查看flannel状态
flannel创建容易出错导致容器无法运行,下图为成功状态


若状态不为running,可使用 kubectl describe pod xx -n kube-system 查看原因

六、node节点加入集群

1. node加入集群

kubeadm join 192.168.214.128:6443 --token 4xpmwx.nw6psmvn9qi4d3cj \
	--discovery-token-ca-cert-hash sha256:c7cbe95a66092c58...

2. 集群节点查看

kubectl get nodes

七、Dashboard搭建

Dashboard提供了可以实现集群管理、工作负载、服务发现和负载均衡、存储、字典配置、日志视图等功能。

1. 下载yaml

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

2. 配置yaml

2.1 修改镜像地址
sed -i 's/kubernetesui/registry.cn-hangzhou.aliyuncs.com\/loong576/g' recommended.yaml
#由于默认的镜像仓库网络访问不通,故改成阿里镜像

    2.2 外网访问
sed -i '/targetPort: 8443/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' recommended.yaml
#配置NodePort,外部通过https://NodeIp:NodePort 访问Dashboard,此时端口为30001

3. 部署

3.1 部署Dashboard
kubectl apply -f recommended.yaml

3.2 状态查看
kubectl get all -n kubernetes-dashboard 

3.3 令牌生成
创建service account并绑定默认cluster-admin管理员集群角色:

  # 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system

  # 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

3.4 令牌查看
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

4.访问

外部通过https://NodeIp:NodePort 访问Dashboard,此时端口为30001,默认运行在master节点上
选择token方式登录,输入“3.4 令牌查看” 获得的token,即可进入页面

注意:
  默认情况下只能使用https访问,但chrome可能会提示不安全,此时在浏览器当前页面下键盘敲击thisisunsafe可继续访问,
  火狐浏览器可正常进入,不会提示不安全。
  token失效较快,可设置参数延长失效时间- --token-ttl=43200 

posted @ 2022-01-25 10:58  tangshow  阅读(90)  评论(0编辑  收藏  举报