CICD系列之k8s


记录k8s的常用操作。

操作系统配置

主机规划

主节点1  172.17.0.8 hostnamectl set-hostname k8s-master01 && bash
工作节点1 172.17.0.5 hostnamectl set-hostname k8s-node01 && bash
工作节点2 172.17.0.9 hostnamectl set-hostname k8s-node02 && bash
VIP 172.17.0.250  #需要配置keepalived 和 haproxy
[keepalived 和 haproxy高可用配置](https://blog.csdn.net/wfl_137724/article/details/115209910)

hosts配置(所有主机都要配置)

# 所有节点的/etc/hosts都要添加
cat >> /etc/hosts <<EOF
vip(master01外网ip) www.k8s.com  
master01_ip(master01内网ip) k8s-master01
node01_ip(node01内网ip) k8s-node01
node02_ip(node02内网ip) k8s-node02
EOF

防火墙配置(所有主机都要配置)

### (CentOS7/Redhat7/Fedora)主机重启会自动加载/etc/modules-load.d 目录下配置文件里配置的module
cat >/etc/modules-load.d/k8s.conf <<EOF
br_netfilter
EOF

内核配置参数(所有主机都要配置)

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF

sysctl --system

selinux 和 swap配置(所有主机都要配置)

### 查看selinux 和 swap(所有节点都要操作)
cat /etc/selinux/config
cat /proc/swaps
 
### 禁用 selinux 和 swap
setenforce 0
swapoff -a

ipvs配置(所有主机都要配置)

# 查看ipvs模块是否启用
lsmod | grep ip_vs
# 如果未启用,启用ipvs
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
 
chmod +x /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

安装docker

docker 安装与配置

安装k8s组件

配置k8s组件安装yum源

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

安装kubelet,kubeadm,kubectl(所有节点都要安装,工作节点不用安装kubectl)

yum install -y kubelet kubeadm kubectl

# kubeadm: the command to bootstrap the cluster
# kubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.
# kubectl: the command line util to talk to your cluster(api server).

设置kubelet开机自启动

# 这里如果启动的话会因为没有kubelet-config配置文件报错,kubeadm init 和 kubeadm john 过程中会生成kubelet配置文件及启动kubelet
systemctl enable kubelet

初始化集群(主节点操作)

获取集群默认启动配置并修改

# 获取默认初始化配置
kubeadm  config  print init-defaults > kubeadm.yaml
# 修改初始化配置 
vim kubeadm.yaml 内容如下:
 
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 172.17.0.8
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master01
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
  CertSANs:
    - 172.17.0.250
    - "www.k8s.com"
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "www.k8s.com:8443"
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.4
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"

启动集群

kubeadm init --config ./kubeadm.yaml --upload-certs | tee init.log
(ERROR FileContent--proc-sys-net-ipv4-ip_forward: echo 1 > /proc/sys/net/ipv4/ip_forward)
 
#如果配置有问题,可以重置,然后重新启动集群,节点重新加入集群前也需要reset。否则无法加入集群
kubeadm reset && kubeadm init --config ./kubeadm.yaml --upload-certs | tee init.log

给当前用户执行kubctl客户端权限

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看集群信息

# 查看集群配置信息
kubectl -n kube-system get cm kubeadm-config -o yaml
# 查看节点信息
kubectl get nodes --show-labels
# 查看pod信息
kubectl get pods -A
# 更多组件信息查看
kubectl get --help

节点taint(污点)信息处理

# 查看节点污点
kubectl describe nodes k8s-master | grep Tain
 
# 有taint的节点只能作为master节点,不能作为worker节点。
# 如果要在有污点的节点上部署服务需要,待部署服务的配置文件需要显示的配置容忍污点
tolerations:(与containers同一层)
      - key: "node-role.kubernetes.io/master"
        operator: "Equal"
        value: ""
        effect: "NoSchedule"
 
### 添加污点
kubectl taint node k8s-master01 key=test
### 删除污点
kubectl taint node k8s-master01 key-

配置网络(主节点操作)

下载并配置flannel config文件

# 解决raw.githubusercontent.com被屏蔽的问题
vim /etc/hosts
添加
199.232.68.133 raw.githubusercontent.com
# 下载flannel部署文件(默认flannel镜像被屏蔽掉了,需要修改下)
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 修改flannel配置
vim kube-flannel.yml
# 找到 image (有两处) 
# 替换为 jmgao1983/flannel  (通过 docker search flannel 找到的,也可以替换成你想要的其他镜像)
image: jmgao1983/flannel

部署 flannel

kubectl apply -f ./kube-flannel.yml

向集群中添加节点(在需要加入集群的节点上操作)

添加主节点(规划只有一个节点,这个用不到)

# k8s-master01 初始集群后的日志里有 advertiseAddress需要替换为配置的ip
# 本人是在公网ip搭的环境不便暴露
kubeadm join www.k8s.com:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:61e933bd8722ede6eac2b12e02a0527ac4566469344dd74564aaeadc22222ff4 \
    --control-plane --certificate-key 5bef349c1fdc0c54c414cba1982d95d5bbc524a825dce8a98e0c6080d44f347f
 
# 如果token过期,可以生成一个新的token
kubeadm token create
 
# 查看token列表
kubeadm token list

添加工作节点

kubeadm join www.k8s.com:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:61e933bd8722ede6eac2b12e02a0527ac4566469344dd74564aaeadc22222ff4

给节点打标签(主节点上操作)

# 给node节点添加node标签(支持kubectl的节点上执行)
kubectl label nodes k8s-node01 k8s-node02 node-role.kubernetes.io/node=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET是一种跨平台的开发框架,它提供了丰富的类库和工具来简化开发过程。它可以在各种操作系统上运行,包括Windows、Linux和macOS等等。K8s是一种容器编排工具,它可以自动化部署、扩展和管理容器化应用程序。Jenkins是一种开源的持续集成和交付工具,它可以自动化构建、测试和部署应用程序。 将这三个概念结合起来,可以构建一个完整的软件开发与交付生态系统。首先,使用.NET作为开发框架,可以开发跨平台的应用程序,为从桌面应用到Web应用提供支持。然后,使用K8s作为容器编排工具,可以将应用程序打包为容器,并在分布式环境中进行部署和管理。这样可以实现应用程序的高可用性和弹性扩展。最后,使用Jenkins作为持续集成和交付工具,可以实现自动化的构建、测试和部署流程。通过Jenkins,开发人员可以在代码提交后自动触发构建和测试过程,减少手动操作的时间和复杂性。同时,Jenkins还可以与K8s集成,实现自动化的应用程序部署和扩展。 .NET、K8s和Jenkins的集成可以形成一个完整的CI/CD(持续集成/持续交付)流水线。开发者可以通过编写适当的脚本和配置文件,实现从代码到部署的自动化流程。这将极大地提高开发效率和产品质量。同时,集成后的系统可以实现快速迭代和灵活的部署,使团队更好地应对需求变化和市场竞争。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值