K8S的集群搭建与入门操作

搭建k8s集群

1.vagrant up创建三个虚拟机

Vagrantfile文件如下:

Vagrant.configure("2") do |config|
   (1..3).each do |i|
        config.vm.define "k8s-node#{i}" do |node|
            # 设置虚拟机的Box
            node.vm.box = "centos/7"

            # 设置虚拟机的主机名
            node.vm.hostname="k8s-node#{i}"

            # 设置虚拟机的IP
            node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"

            # 设置主机与虚拟机的共享目录
            # node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share"

            # VirtaulBox相关配置
            node.vm.provider "virtualbox" do |v|
                # 设置虚拟机的名称
                v.name = "k8s-node#{i}"
                # 设置虚拟机的内存大小
                v.memory = 4096
                # 设置虚拟机的CPU个数
                v.cpus = 4
            end
        end
   end
end

2.设置每个虚拟机允许使用密码链接

vagrant ssh k8s-node1
vi  /etc/ssh/sshd_config
将PasswordAuthentication no 修改为 yes
重启:service sshd restart

 NAT网络和前置环境

全局设定-网络-+号 - 创建出一个nat网络

单选一个虚拟机-设置-网络-链接方式选择"nat网络",mac地址重新生成一下

关掉防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭 selinux:

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

关闭 swap:

swapoff -a 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab 永久
free -g 验证,swap 必须为 0;

添加主机名与 IP 对应关系

vi /etc/hosts
10.0.2.15 k8s-node1
10.0.2.4 k8s-node2
10.0.2.5 k8s-node3

将桥接的 IPv4 流量传递到 iptables 的链:

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

 安装docker,kubelet,kubeadm,kubectl

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

1.安装docker

按照之前的配置可成功:https://www.tinstu.com/2499.html

1、卸载系统之前的 docker

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、安装 Docker-CE

安装必须的依赖

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

设置 docker repo 的 yum 位置

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装 docker,以及 docker-cli

sudo yum install -y docker-ce docker-ce-cli containerd.io

3、配置 docker 加速.

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://ezla0tv0.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4、启动 docker & 设置 docker 开机自启

systemctl enable docker

 添加阿里云的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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3、安装 kubeadm,kubelet 和 kubectl

yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet

部署 k8s-master

1.节点初始化

执行master_images.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
#   docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName  k8s.gcr.io/$imageName
done

主节点 k8s-node(master)中执行

kubeadm init \ 
--apiserver-advertise-address=10.0.2.15 \ 
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ --kubernetes-version v1.17.3 \ 
--service-cidr=10.96.0.0/16 \ 
--pod-network-cidr=10.244.0.0/16

-------------***-------------
上面5行,一定要删除每一行后面的空格,否者报错:
unknown command " " for “kubeadm init”
To see the stack trace of this error execute with --v=5 or higher

2、测试 kubectl(主节点执行)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl get nodes 获取所有节点

上面不执行,执行下面的kubectl apply -f kube-flannel.yml 会报:

The connection to the server localhost:8080 was refused - did you specify the right host or port?

journalctl -u kubelet 查看 kubelet 日志(先不执行,下一步执行)

kubeadm join 10.0.2.15:6443 --token psdfz7.jiadccmhb0vd6x6p \
    --discovery-token-ca-cert-hash sha256:2bc2213accfdedde0895dbfb97f5d19e88902e2e35875140f60c669aa5acde10 

安装 Pod 网络插件(CNI)

在上传的k8s文件夹下面执行:

kubectl apply -f kube-flannel.yml

kubectl get nodes
 看到master为ready后执行

kubeadm join 10.0.2.15:6443 --token psdfz7.jiadccmhb0vd6x6p \
    --discovery-token-ca-cert-hash sha256:2bc2213accfdedde0895dbfb97f5d19e88902e2e35875140f60c669aa5acde10 

主节点中执行: watch kubectl get pod -n kube-system -o wide 都为running后执行 kubectl get nodes
  node1 node2 node3 都为readey

 

 

K8S入门

1.部署一个Tomcat

kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8

kubectl get pods -o wide 可以获取到 tomcat 信息

 

2.暴露访问

kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort

kubectl get svc 查看暴露在哪一个端口

 

本地访问:192.168.56.100:30059

3、动态扩容测试

扩容: kubectl scale --replicas=3 deployment tomcat6
扩容了多份,所有无论访问哪个 node 的指定端口,都可以访问到 tomcat6

删除

Kubectl get all
kubectl delete deploy/nginx
kubectl delete service/nginx-service

kubect

1、kubectl 文档
https://kubernetes.io/zh/docs/reference/kubectl/overview/
2、资源类型
https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E%8B
3、格式化输出
https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA
4、常用操作
https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E7%A4%BA%E4%BE%8B-%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C
5、命令参考
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

Ingress

1)、部署 Ingress Controller

k8s文件夹下执行:kubectl apply -f ingress-controller.yml

2)、创建 Ingress 规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web
spec:
rules: - host: tomcat6.atguigu.com
http:
paths: - backend:
serviceName: tomcat6
servicePort: 80

 

 

 

阅读剩余
THE END