k8s快速入门教程-----1 kubernetes初步使用

1.1 kubernetes单节点部署

kubernetes简称K8S,以下内容都简称K8S。
生产环境部署K8s的2种方式, kubeadm和二进制。kubeadm是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 二进制是从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群,复杂度高。
当然,要搭建这么一个可运行的系统通常也不会太容易,按照实践结合理论学习思路,我们会在最短时间内搭建起一个可用系统,这样就能够尽快建立起对学习对象的感性认识。先把玩起来,快速了解基本概念、功能和使用场景,作者特意准备一个脚本,方便大家进行快速部署单机版的K8S。
要求:双核CPU/2G内存/100G硬盘的物理机或者虚拟机,部署机器能访问外网,配置好正确的DNS。
相关教程视频参考: https://www.ixigua.com/7131294256806756901?logTag=0c9ad1aac3506f833d5e
1 通过百度网盘下载脚本k8s-mini-install.sh:

链接: https://pan.baidu.com/s/1XyC6B-0gLkTUZOLABFbqWA  密码: 5wr3

2 修改脚本的IP地址为本机的IP地址,例如192.168.3.89

sed -i "s/X.X.X.X/192.168.3.89/g" k8s-mini-install.sh

3 直接运行脚本:

. k8s-mini-install.sh

以上脚本也可以一步一步安装:

# 配置主机名
hostnamectl set-hostname k8s-master
echo "X.X.X.X k8s-master" >> /etc/hosts
# 下载docker yum源
yum install -y wget
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#  增加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=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
# 关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 关闭firewalld
systemctl disable firewalld --now
# 关闭交换分区
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 更新yum源
# 启用ipv4转发
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
sysctl --system
# 安装docker 
yum install docker-ce-19.03.* -y
systemctl enable docker --now
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
  "exec-opts":["native.cgroupdriver=systemd"],
  "log-driver":"json-file",
  "log-opts": {
  "max-size": "100m"
  },
  "storage-driver":"overlay2",
  "storage-opts": [
  "overlay2.override_kernel_check=true"
  ]
}
EOF
systemctl restart docker
# 安装k8s
yum install -y kubelet-1.19.6 kubeadm-1.19.6 kubectl-1.19.6
systemctl enable kubelet
kubeadm init  --apiserver-advertise-address=X.X.X.X  --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.6  --service-cidr=172.16.0.0/16  --pod-network-cidr=172.18.0.0/16   --ignore-preflight-errors=all
sleep 120
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
wget --no-check-certificate https://docs.projectcalico.org/v3.15/manifests/calico.yaml
kubectl apply -f calico.yaml
sleep 360
kubectl taint node k8s-master node-role.kubernetes.io/master-
kubectl get pod -n kube-system

1.2 部署应用

本章节将简单熟悉部署一个简单的应用。

相关教程视频参考:https://www.ixigua.com/7131362279357940238?logTag=4a7ba45ba4ba29364f9b
执行命令:

kubectl run --image=nginx --port=80 nginx0807

这里我们通过kubectl run部署一个应用,命名为nginx0807,如下所示。docker容器的镜像通过–image制定。–port设置应用对外服务的端口。

[root@k8s-master ~]# kubectl run --image=nginx --port=80 nginx0807
pod/nginx0807 created
                                                  图1-2-1

pod是容器的集合,通常会把一组相关的容器放到一个Pod中,同一个Pod中的所有容器共享IP地址和Port空间,也就是说他们在一个network namespace中。
Pod是kubernetes调度的最小单位,同一Pod中的容器始终被一起调度。
运行kubectl get pods,查看当前的Pod,如下所示:

[root@k8s-master ~]# kubectl get pod
NAME                             READY   STATUS    RESTARTS   AGE
nginx0807                        1/1     Running   0          6m45s

nginx0807就是应用的Pod。

1.3 访问应用

默认情况下,所有Pod只能在集群内部访问。对于上面这个例子,要访问应用只能直接访问容器的80端口。为了能够从外部访问应用,我们需要将容器的80端口映射到节点的端口。
相关教程视频参考:https://www.ixigua.com/7131362627015410212?logTag=38c241975877173007fd
执行如下命令:

kubectl expose pod nginx0807 --port=80 --target-port=80 --type="NodePort"

提示如下:

[root@k8s-master ~]# kubectl expose pod nginx0807 --port=80 --target-port=80 --type="NodePort"
service/nginx0807 exposed
[root@k8s-master ~]# 

执行命令kubectl get services,可以查看应用被映射到节点的哪个端口,如下:

[root@k8s-master ~]# kubectl get services
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   172.16.0.1       <none>        443/TCP        17d
nginx0807      NodePort    172.16.187.184   <none>        80:31140/TCP   79s

kubernetes是默认的service,暂时不用理会,后面会讲解。nginx0807是我们应用的serivce,默认名字与pod名字一样,80端口已经映射到节点的31140端口,端口号是随机分配的,可以执行如下命令访问应用:

[root@k8s-master ~]# curl 127.0.0.1:31140
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

下一篇:2 深入理解Pod

你可能感兴趣的:(kubernetes入门教程,kubernetes,docker,容器)