k8s下载准备环境集群

1.买服务器
按量付费 优惠区域
选择

k8s下载准备环境集群_第1张图片
k8s下载准备环境集群_第2张图片下一步
k8s下载准备环境集群_第3张图片k8s下载准备环境集群_第4张图片
k8s下载准备环境集群_第5张图片远程连接
k8s下载准备环境集群_第6张图片

1、所有节点前置环境配置

  • centos 版本为 7.6 或 7.7、CPU 内核数量大于等于 2,且内存大于等于 4G
  • hostname 不是 localhost,且不包含下划线、小数点、大写字母
  • 任意节点都有固定的内网 IP 地址(集群机器统一内网)
  • 任意节点上 IP 地址 可互通(无需 NAT 映射即可相互访问),且没有防火墙、安全组隔离
  • 任意节点不会直接使用 docker run 或 docker-compose 运行容器。Pod
#关闭防火墙: 或者阿里云开通安全组端口访问
systemctl stop firewalld
systemctl disable firewalld

#关闭 selinux: linux安全策略的关  k8s还没搞定
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

#关闭 swap: 交换分区的关
swapoff -a  #临时 
sed -ri 's/.*swap.*/#&/' /etc/fstab  #永久

//方便访问
vi /etc/hosts
172.26.156.157 k8s-01
172.26.156.156  k8s-02
172.26.27.51  k8s-03

k8s下载准备环境集群_第7张图片

#将桥接的 IPv4 流量传递到 iptables 的链:
# 修改 /etc/sysctl.conf
# 如果有配置,则修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g"  /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g"  /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g"  /etc/sysctl.conf
# 可能没有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf
# 执行命令以应用
sysctl -p

k8s下载准备环境集群_第8张图片

2、所有节点安装docker

k8s下载准备环境集群_第9张图片

#1、安装docker
##1.1、卸载旧版本
sudo yum remove docker \
	docker-client \
	docker-client-latest \
	docker-common \
	docker-latest \
	docker-latest-logrotate \
	docker-logrotate \
	docker-engine
##1.2、安装基础以来
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

##1.3、配置docker yum源
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

##1.4、安装并启动 docker
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
systemctl enable docker
systemctl start docker

##1.5、配置docker加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://jgvwfl6l.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


yum install -y wget

安装 nfs-utils(后来做)

#2、安装 nfs-utils
# 必须先安装 nfs-utils 才能挂载 nfs 网络存储
yum install -y nfs-utils
yum install -y wget

--------------------------------
#3、卸载k8s
kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum clean all
yum remove kube*

3、所有节点安装k8s、kubelet、kubeadm、kubectl

#kubeadm初始化集群。master:kubeadm init   node:kubeadm join
#kubectl: 操作k8s集群的命令行工具(只能在master上操作集群)

# 配置K8S的yum源
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 卸载旧版本
yum remove -y kubelet kubeadm kubectl

# 安装kubelet、kubeadm、kubectl
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3

#开机启动和重启kubelet
systemctl enable kubelet && systemctl start kubelet
##注意,如果此时查看kubelet的状态,他会无限重启,等待接收集群命令,和初始化。这个是正常的。

k8s下载准备环境集群_第10张图片

4、初始化master节点

#1、下载master节点需要的镜像【选做】
#创建一个.sh文件,内容如下,
#!/bin/bash
images=(
	kube-apiserver:v1.17.3
    kube-proxy:v1.17.3
	kube-controller-manager:v1.17.3
	kube-scheduler:v1.17.3
	coredns:1.6.5
	etcd:3.4.3-0
    pause:3.1
)
for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done


#2、初始化master节点
kubeadm init \
--apiserver-advertise-address=172.26.156.157 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.17.3 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16

# k8s扁平化了后来的网络。不止有主机ip这一层。

#service网络和pod网络;docker service create 
#docker container --> ip brigde
#Pod ---> ip 地址,整个集群 Pod 是可以互通。255*255
#service ---> 

#3、配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#4、提前保存令牌
kubeadm join 172.26.184.101:6443 --token 98mq7n.blsjom2b416sodow \
--discovery-token-ca-cert-hash sha256:a1cd9ab6c0f26cd1e792bc953228a0492948f9b85620bc448dbe1ce2d871cda8

#5、部署网络插件
#上传网络插件,并部署
#kubectl apply -f calico-3.13.1.yaml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

#网络好的时候,就没有下面的操作了
calico:
image: calico/cni:v3.14.0
image: calico/cni:v3.14.0
image: calico/pod2daemon-flexvol:v3.14.0
image: calico/node:v3.14.0
image: calico/kube-controllers:v3.14.0

docker pull registry.cn-zhangjiakou.aliyuncs.com/k8sx/calico-kube-controllers:v3.12.0
docker tag registry.cn-zhangjiakou.aliyuncs.com/k8sx/calico-kube-controllers:v3.12.0 calico/kube-controllers:v3.14.0


#6、查看状态,等待就绪
watch kubectl get pod -n kube-system -o wide


kubectl apply -f calico.yaml
kubectl get nodes #获取集群所有节点状态
kubectl get pods -A #获取集群所有Pod(应用)的状态
kubectl get cs #获取节点所有组件的状态
kubectl  create 

k8s下载准备环境集群_第11张图片

k8s下载准备环境集群_第12张图片

k8s下载准备环境集群_第13张图片

k8s下载准备环境集群_第14张图片

k8s下载准备环境集群_第15张图片

5、worker节点加入集群

#1、使用刚才master打印的令牌命令加入
kubeadm join 172.26.248.150:6443 --token ktnvuj.tgldo613ejg5a3x4 \
    --discovery-token-ca-cert-hash sha256:f66c496cf7eb8aa06e1a7cdb9b6be5b013c613cdcf5d1bbd88a6ea19a2b454ec
#2、如果超过2小时忘记了令牌,可以这样做
kubeadm token create --print-join-command #打印新令牌
kubeadm token create --ttl 0 --print-join-command #创建个永不过期的令牌

令牌
kubeadm join 172.26.156.157:6443 --token xeyohz.dfe6jfozeya1u748 \
    --discovery-token-ca-cert-hash sha256:2be96732f69270e89786deb42dab5760418357a4cd9f529d3a82e3e1f24aaeef 

k8s下载准备环境集群_第16张图片

k8s下载准备环境集群_第17张图片

集群只要是get pods -A看到calico相关没有running,都是一下东西没下载来。
      
      
1、第一种解决方案。      
      去阿里云把一下镜像下载来。  aliyun.xxx.xx/calico/cni:v3.15.1
      docker tag aliyun.xxx.xx/calico/cni:v3.15.1 calico/cni:v3.15.1
          image: calico/cni:v3.15.1
          image: calico/pod2daemon-flexvol:v3.15.1
          image: calico/node:v3.15.1
          image: calico/kube-controllers:v3.15.1
2、第二种解决方案。
	该calico配置文件,image指向的镜像改为阿里云的,重新运行kubectl apply -f calico.yaml
3、第三种
	重启,触发k8s自愈。reboot

你可能感兴趣的:(k8s)